【问题标题】:MongoDB $concatenate Date ErrorMongoDB $连接日期错误
【发布时间】:2016-11-12 16:55:59
【问题描述】:

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

{
        "_id": {
            "Year": 2016,
            "locationID": " WL 001",
            "Day": 25,
            "Hour": 12,
            "Month": 1
        },
        "temperature": 10.858749999999999,
        "pH": 0,
        "Conductivity": 2032.375
    }

我想重新组合数据格式并连接 _id 字段的日期部分,以便它代表下面的新数据格式格式

{
    "_id": {
       "locationID": " WL 001",
    },
    "Readings": {
        "temperatue": {
            "value": 8.879
        },
        "SensoreDate": {
            "value": "2016-01-25:12"
        },
        "pH": {
            "value": 16.81
        },
        "Conductivity": {
            "value": 1084
        }
    },
}

这是我的聚合查询的 $project 部分

{
    "$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 我尝试了几个选项,但无法让它工作

【问题讨论】:

标签: javascript python mongodb pymongo-2.x database


【解决方案1】:

您可以使用 concat 和 substr 将它们加入日期。

'SensoreDate': {
    'value': {
        '$concat': [{
                $substr: ["$_id.Year", 0, -1]
            },
            "-", {
                $substr: ["$_id.Month", 0, -1]
            },
            "-", {
                $substr: ["$_id.Day", 0, -1]
            },
            ":", {
                $substr: ["$_id.Hour", 0, -1]
            }
        ]
    }
 }

【讨论】:

    【解决方案2】:

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

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

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

    $time_in_sec_epoch 的计算可以使用 $sum$divide$subtract 等聚合运算符来完成。您可以使用answer 中给出的公式。这会很乏味,但希望你能明白。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2016-09-13
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多