查找其嵌套对象与同一键的两个不同值匹配的对象

Find objects whose nested objects match two different values for the same key

我有这样的对象:

[
  {
    "url": "a",
    "nested_object_keys": [
      {
        "vendor": "terraform",
        "tag": "some_tag"
      },
      {
        "vendor": "terraform",
        "tag": "some_other_tag"
      }
    ]
  },
  {
    "url": "c",
    "nested_object_keys": [
      {
        "vendor": "terraform",
        "tag": "some_tag"
      }
    ]
  },
  {
    "url": "b",
    "nested_object_keys": [
      {
        "vendor": "terraform",
        "tag": "some_tag"
      },
      {
        "vendor": "terraform",
        "tag": "some_other_tag"
      }
    ]
  }
]

我想查找其嵌套对象键匹配 {'tag': 'some_tag'} AND {'tag': 'some_other_tag'}.

的对象

我尝试了几种不同的方法(使用 $elemMatch),唯一有效的方法是:

query = {
    '$and': [
        {
            'nested_object_keys': {
                '$elemMatch': {'tag': 'some_tag'}
            }
        },
        {
            'nested_object_keys': {
                '$elemMatch': {'tag': 'some_other_tag'}
            }
        }
    ]
}

有没有更紧凑的方法来做到这一点?

您可以使用 $all 运算符:

db.collection.find({
  "nested_object_keys.tag": { $all: ["some_tag", "some_other_tag"] }
})

Working example