Mongodb $ match和$ project聚合

时间:2013-03-20 19:56:12

标签: mongodb aggregation-framework

我有这么简单的文件。

> 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
}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

通过查看您的文档,查询和评论,很明显您不使用$group运算符和$match只是一个select子句,它会根据您给定的条件过滤结果。在你的情况下

... $match: {
...   unitStatus: {$exists: true, $nin: ["es_pws", "es_stl"]}
... }

$match$group并不保证会返回一个文档。什么保证您的架构,查询标准。