首页 > 解决方案 > mongo:如何投影不包括某些值的数组元素?

问题描述

我正在使用 Mongo 3.6。如何返回不在某个值列表中的数组项?

这是文档:

{
    "_id" : "myId",
    "myList" : [ 
        "a", 
        "b", 
        "c"
    ]
}

这是查询,它只返回第一个匹配项:

db.getCollection('Item').find({_id:"myId"}, {
    myList:{ $elemMatch:{
        $not: { $in:["a"] }
    }}
})

结果:

{
    "_id" : "myId",
    "myList" : [ "b" ]
}

预期结果 - 如何更改上面的查询以返回“不在 [“a”] 中的所有匹配项?产生的东西:

{
    "_id" : "myId",
    "myList" : [ "b", "c" ]
}

知道为什么缺少物品吗?

标签: mongodb

解决方案


用户聚合与

$过滤器

如下以获得预期的输出:

db.getCollection("Item").aggregate([
        {
            $project: {
                list: {
                    $filter: {
                        input: "$myList",
                        as: "item",
                        cond: { $ne: ["$$item", "a"] },
                    },
                },
            },
        },
    ]);

推荐阅读