MongoDB:聚合从DateTime字符串创建ISODate

时间:2017-12-11 11:03:56

标签: mongodb datetime aggregation-framework projection isodate

我正在使用MongoDB聚合框架对我的数据库中的一些内容进行分组,排序和投影。我的结果数组的元素如下所示

{
  someField: "someField",
  timestamp: "2017-12-05T19:00:00.000Z"
}

我讨论的聚合管道步骤如下所示

{
  $project: {
    _id: 0,
    someField: 1,
    timestamp: '$_id.timestamp',
  }
}

我想将DateTime字符串转换为ISODate。如果我使用ISODate('$timestamp'),则mongo客户端会返回错误Invalid ISODate。 另一种方法是仅使用Date('$timestamp'),只返回我的本地日期,就好像我将使用Date()一样。然而,如果我将print(ISODate("2017-12-05T19:00:00.000Z"))直接输入mongo客户端,一切都按预期工作。

有什么建议吗?

编辑:我们正在使用Mongo 3.4。版本3.6提供了一个解决方案,但我不确定我们是否可以升级到3.6。 (见下面的答案)

1 个答案:

答案 0 :(得分:1)

您可以使用3.6中提供的新$dateFromString运算符。

db.collection.aggregate([
  {
    "$project": {
      "timestamp": {
        "$dateFromString": {
          "dateString": "$timestamp"
        }
      }
    }
  }
])