查找其嵌套对象与同一键的两个不同值匹配的对象
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"] }
})
我有这样的对象:
[
{
"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"] }
})