我有这套非常简单的文档。
> db.ysTest.aggregate({$project:{_id:1,unitStatus:1}});
{
"result" : [
{
"_id" : ObjectId("514309f3e18aa7d14100217a"),
"unitStatus" : "es_pws"
},
{
"_id" : ObjectId("514309f3e18aa7d141002816"),
"unitStatus" : "es_run"
},
{
"_id" : ObjectId("514309f0e18aa7d14100021e")
}
],
"ok" : 1
}
当使用 $match 和 $project 使用“聚合”时,我希望有 1 个文档,但我得到了所有文档。 注意:我使用聚合是因为这将成为更复杂匹配的一部分,但我试图在这个示例中保持简单。
> db.ysTest.aggregate({
... $match: {
... unitStatus: {$exists: true, $nin: ["es_pws", "es_stl"]}
... },
... $project: {_id: 1,unitStatus:1}
... });
{
"result" : [
{
"_id" : ObjectId("514309f3e18aa7d14100217a"),
"unitStatus" : "es_pws"
},
{
"_id" : ObjectId("514309f3e18aa7d141002816"),
"unitStatus" : "es_run"
},
{
"_id" : ObjectId("514309f0e18aa7d14100021e")
}
],
"ok" : 1
}
我做错了什么?
最佳答案
通过查看您的文档、查询和评论,很明显您没有使用 $group
运算符,而 $match
只是一个筛选子句结果基于您给定的标准。在你的情况下
... $match: {
... unitStatus: {$exists: true, $nin: ["es_pws", "es_stl"]}
... }
但是 $match
和 $group
不保证它会返回一个文档。什么保证是你的架构,查询条件。
关于Mongodb $match 和 $project 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15533417/