与$ match和日期比较的聚合拼图

时间:2018-01-23 18:49:18

标签: mongodb aggregation-framework

我有一个比较日期的难题。我创建了一个简化的故事来帮助说明。想象一下以下文档集:

{ 
    "_id" : "A", 
    "t1" : ISODate("2018-01-23T00:00:00.000+0000")
}
{ 
    "_id" : "B", 
    "t1" : ISODate("2018-01-22T00:00:00.000+0000")
}
{ 
    "_id" : "C", 
    "t1" : ISODate("2018-01-21T00:00:00.000+0000")
}

这是三份日期为2018年的文件。

现在假设一个带有$match条目的聚合,如下所示:

{
  $match:
  {
    "t1": {
      $gte: {
        $dateFromString: {
          dateString: "2017-02-08T12:10:40"
        }
      }
    }
  }
}

这应该做的是匹配所有文件,因为我所比较的日期早在2017年。但是,我发现的是没有文件匹配。这是聚合管道中的第一个阶段,但没有文档传递,这是当前故事的结束。

谁能看到我可能出错的地方?

2 个答案:

答案 0 :(得分:2)

您必须使用$expr(3.6 mongo版本)在$ match阶段使用聚合函数(dateFromString)。 $ match的简单形式仅支持查询运算符。

比较query operatorsaggregation comparison operators

更改为

{"$match":{"$expr":{"$gte":["$t1",{"$dateFromString":{"dateString":"2017-02-08T12:10:40"}}]}}}

答案 1 :(得分:0)

签出此npm模块:https://www.npmjs.com/package/mongodb-extended-json,它将自动为您将{'$ date':“ 2016-01-01T00:00:00.000Z”}转换为日期对象