在 MongoDB 的嵌套数组字段中查找仅包含预期值的文档

Find document with only expected values allowed in nested array field in MongoDB

我将从示例开始,因为它对我来说更容易解释。

[
    {
        "_id": 100,
        "narr": [
            {
                "field": 1
            }
        ]
    },
    {
        "_id": 101,
        "narr": [
            {
                "field": 1,
            },
            {
                "field": 2
            }
        ]
    }
]

目标是找到与我为 field.
指定的值完全一致的文档 示例:
对于 lookup = [1] 查找包含 _id=100.
的文档 对于 lookup = [1,2] 查找包含 _id=101.
的文档 到目前为止,我想出了(对于 [1,2] 的第二个例子):

db.col.find(
    {
        "narr": {
            "$all": [
                {
                    "$elemMatch": {
                        "field": {
                            "$in": [1, 2]
                        }
                    }
                }
            ]
        }
    }
)

但它还包括 _id=100 的文档。如何让它执行严格匹配?
构建整个数组将不起作用,因为每个嵌套结构中都有多个具有未知值的字段。

不考虑 field 和您输入的重复,您可以简单地在 narr.field 上查找。这就像对数组执行搜索,其中的值来自 field.

db.collection.find({
  $expr: {
    $eq: [
      "$narr.field",
      [
        1,
        2
      ]
    ]
  }
})

这里是Mongo playground供您参考。

如果可能出现重复,请尝试使用$setEquals

db.collection.find({
  $expr: {
    "$setEquals": [
      "$narr.field",
      [
        1,
        2
      ]
    ]
  }
})

这里是Mongo playground供您参考。