首页 > 解决方案 > 如何结合 Mongo $in 和 $cond

问题描述

我有一个看起来像这样的集合(每个数组元素是 1 个文档):

[
    {
        "_id": 1,
        "title": "title",
        "data": [
            {
                "_id": 41,
                "name": "test 1"
            },
            {
                "_id": 42,
                "name": "test 2"
            },
            {
                "_id": 43,
                "name": "test 3"
            }
        ]
    },
    {
        "_id": 1,
        "title": "title 2",
        "data": [
            {
                "_id": 44,
                "name": "test 4"
            },
            {
                "_id": 45,
                "name": "test 5"
            }
        ]
    },
]

我想做的是使用$redactwhere data._id is $ina array of过滤掉所有文档[41, 42]。因此,如果 data._id 曾经等于 41 或 42,则应保留整个文档。否则,它应该被修剪。

{
    $cond: {
        if: {
            $in: [
                "$data._id",
                [ 41, 42 ]
            ]
        },
        then: "$$KEEP",
        else: "$$PRUNE"
    }
}

$redact但是,当我在 Compass 中使用舞台时,上面的查询不会返回任何内容。

标签: mql

解决方案


推荐阅读