首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB $concatenate日期错误

MongoDB $concatenate日期错误
EN

Stack Overflow用户
提问于 2016-11-12 16:55:59
回答 2查看 1.6K关注 0票数 0

我正在进行一个mongo聚合项目,每隔两个小时对平均读数进行分组,它返回所需的输出如下

代码语言:javascript
复制
{
        "_id": {
            "Year": 2016,
            "locationID": " WL 001",
            "Day": 25,
            "Hour": 12,
            "Month": 1
        },
        "temperature": 10.858749999999999,
        "pH": 0,
        "Conductivity": 2032.375
    }

我想重组数据格式,并将_id字段的日期部分连接起来,以便它表示下面的新数据格式。

代码语言:javascript
复制
{
    "_id": {
       "locationID": " WL 001",
    },
    "Readings": {
        "temperatue": {
            "value": 8.879
        },
        "SensoreDate": {
            "value": "2016-01-25:12"
        },
        "pH": {
            "value": 16.81
        },
        "Conductivity": {
            "value": 1084
        }
    },
}

下面是聚合查询的$project部分

代码语言:javascript
复制
{
    "$project": {
        '_id': '$_id.locationID',
        'Readings': {
            'pH': {'value': '$pH'},
            'temperature': {'value': '$temperature'},
            'Conductivity': {'value': '$Conductivity'},
            'SensoreDate': {'value': {'$concat': ["$_id.Year", "$_id.Month", "$_id.Day", "$_id.Hour"]} }
        }
    }
}

但是我得到了一个错误,$concat只支持字符串,而不是NumberInt32,我尝试了几个选项,但无法让它工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-12 22:57:47

您可以使用concat和substr将它们加入到约会中。

代码语言:javascript
复制
'SensoreDate': {
    'value': {
        '$concat': [{
                $substr: ["$_id.Year", 0, -1]
            },
            "-", {
                $substr: ["$_id.Month", 0, -1]
            },
            "-", {
                $substr: ["$_id.Day", 0, -1]
            },
            ":", {
                $substr: ["$_id.Hour", 0, -1]
            }
        ]
    }
 }
票数 1
EN

Stack Overflow用户

发布于 2016-11-12 18:23:20

在管道中无法将int转换为str。因此,对于给定的数据格式,$concat是不可能的。

另一种可以工作的方法是技巧,将年份、月、日转换为BSON Date格式对象。

灵感来自于dateObj: {$add: [new Date(0), '$time_in_sec_epoch']}

$time_in_sec_epoch的计算可以使用$sum$divide$subtract等聚合运算符来完成。您可以使用这个answer中给出的公式。这将是乏味的,但希望你能得到这个想法。

对于字符串部件的dateObj,请使用$dateToString

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40565286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档