Mongodb $match 和 $project 聚合

标签 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 和 $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/

相关文章:

java - MongoDB Java驱动程序: Insert document if it does not exist else do nothing

mongodb - 从MongoDB中的数组中删除元素

mongodb - 在 Mongoose 中使用连接和过滤器进行查询

mongodb - 子文档中的 Mongoose 聚合管道连接字段

mongodb - 选择 2 个字段并返回具有不同值的排序数组

node.js - Mongoose : finding documents with a specific condition

mongodb - MongoDB中的多语言属性

node.js - Mongoose : moment(). 格式不起作用

mongodb - 异常 : can't convert from BSON type EOO to Date

mongodb - 在 mongodb 中创建具有非聚合字段的 View 而不将其放入 _id 字段