我有这么简单的文件。
> 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& amp; $ 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
}
我做错了什么?
答案 0 :(得分:1)
通过查看您的文档,查询和评论,很明显您不使用$group
运算符和$match
只是一个select子句,它会根据您给定的条件过滤结果。在你的情况下
... $match: {
... unitStatus: {$exists: true, $nin: ["es_pws", "es_stl"]}
... }
但$match
和$group
并不保证会返回一个文档。什么保证您的架构,查询标准。