Pymongo :: 如何比较给定的数组是否与文档完全匹配?

Pymongo :: How to compare the given array exactly matches with the document?

我有一个 mongo 文档具有以下属性

{
  "label": [
    "ibc",
    "ibd",
    "ibe"
  ],
  "location": "vochelle st"
}

并且我必须 return 仅当文档标签与给定数组完全匹配时才需要 dcocument,即 ["ibc","ibd"] 同样,我正在使用查询

db.collection.find({"location":"vochelle st","dock_label":{"$all":["ibc", "ibd"]}})

实际响应:

{
      "label": [
        "ibc",
        "ibd",
        "ibe"
      ],
      "location": "vochelle st"
    }

预期响应:

{}

由于给定数组中不存在标签“ibe”,因此预期结果必须为空字典。

  1. 使用 $setIntersectionlabel 和输入数组相交。
  2. 比较两个相交的数组 (来自 1)label 数组通过 $eq 匹配。
db.collection.find({
  "location": "vochelle st",
  $expr: {
    $eq: [
      {
        $setIntersection: [
          "$label",
          [
            "ibc",
            "ibd"
          ]
        ]
      },
      "$label"
    ]
  }
})

Sample Mongo Playground

在查询中输入 $size

db.collection.find({
  location: "vochelle st",
  label: {
    $all: [
      "ibc",
      "ibd"
    ],
    $size: 2
  }
})

mongoplayground

如果你想检查数组是否与你的输入完全匹配,你不需要任何运算符,只需将它与你的值进行比较:

db.collection.find({"location":"vochelle st","label": ["ibc", "ibd"]})