3

我有这套非常简单的文件。

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

我究竟做错了什么 ?

4

1 回答 1

2

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

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

$match并不$group保证它会返回一份文件。什么保证是您的架构,查询条件。

于 2016-05-09T13:29:09.873 回答