我有一个比较日期的难题。我创建了一个简化的故事来帮助说明。想象一下以下文档集:
{
"_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年。但是,我发现的是没有文件匹配。这是聚合管道中的第一个阶段,但没有文档传递,这是当前故事的结束。
谁能看到我可能出错的地方?
答案 0 :(得分:2)
您必须使用$expr(3.6 mongo版本)在$ match阶段使用聚合函数(dateFromString
)。 $ match的简单形式仅支持查询运算符。
比较query operators
与aggregation 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”}转换为日期对象