我们目前正在使用配置数据库来分析我们的数据。我遇到了使用聚合查询查询的问题。我想要date1在date2之前的所有文件。 (我使用了3个过滤器来调试我的结果,以后应该可以将它放在1个匹配过滤器中)
[{
"$match": {
"date1": {
"$exists": true
}
}
}, {
"$project": {
"_id": 0,
"date1": 1,
"date2": 1
}
}, {
"$match": {
"date1": {
"$lt": "$date2"
}
}
}]
我总是没有结果。有谁可以帮我查询?
修改
文件如下:
{
_id: ObjectID,
date1: ISODate("2016-10-04T08:34:15.041Z"),
date2: ISODate("2016-10-05T08:34:15.041Z")
... some more fields that are not interesting for this query
}
该系列中约有5万份文件。
答案 0 :(得分:4)
您可以使用$where
来比较两个日期字段。
db.collection.find({
$where : "this.date1 < this.date2"
});
满足上述条件的文件将出现在结果上。如果任何没有date1
或date2
属性的文档将不会出现在结果中。
使用汇总功能: -
$ cmp 可用于比较值。 -1
表示第一个小于第二个。
需要第一个管道来消除不包含date1
和date2
的文件
db.collection.aggregate([
{
"$match": {
"date1": {
"$exists": true
},
"date2": {
"$exists": true
}
}
},
{"$project": {
"date1":1,
"date2":1,
"dateComp": {"$cmp":["$date1","$date2"]}
}
},
{"$match":{"dateComp": -1}}
]);