Cor*_*hof 3 metabase mongodb aggregation-framework
我们目前正在使用元数据库来分析我们的数据。我在使用聚合查询进行查询时遇到了问题。我想要 date1 在 date2 之前的所有文档。(我使用了 3 个过滤器来调试我的结果,稍后应该可以将其放入 1 个匹配过滤器中)
[{
"$match": {
"date1": {
"$exists": true
}
}
}, {
"$project": {
"_id": 0,
"date1": 1,
"date2": 1
}
}, {
"$match": {
"date1": {
"$lt": "$date2"
}
}
}]
Run Code Online (Sandbox Code Playgroud)
我总是没有结果。谁能帮我查询?
编辑:
文件如下所示:
{
_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
}
Run Code Online (Sandbox Code Playgroud)
集合中有大约 50k 文档。
您可以使用$where
来比较两个日期字段。
db.collection.find({
$where : "this.date1 < this.date2"
});
Run Code Online (Sandbox Code Playgroud)
满足上述条件的文件将出现在结果中。如果任何没有属性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}}
]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7012 次 |
最近记录: |