我有一个这样的文档:
[
{
"id": 1,
"active": true,
"key": []
},
{
"id": 2,
"active": true,
"key": [
{
"code": "fake_code",
"ids": [
""
],
"labels": [
"d"
]
}
]
},
{
"id": 3,
"active": true,
"key": [
{
"code": "fake_code",
"ids": [
""
],
"labels": [
"a",
"b",
"c"
]
}
]
}
]
我只想得到文档的id
,其中给定数组的任何值(比如说["a","b","c","d"](存在于文档的labels
字段中。
这意味着,由于给定的数组=["a","b","c","d"],如果您将看到这些文档,那么您可以发现具有id = 2
的文档在labels
字段中具有["d",而具有id = 3
的文档在其labels
中具有["a","b","c"]。
因此,预期的输出是,
[
{
"id": 2
},
{
"id": 3
}
]
目前,我一直在使用
db.collection.find({
"key": {
"$all": [
{
"$elemMatch": {
"ids": {
"$in": [
""
]
},
"code": "fake_code",
"labels": {
"$in": [
[
"a",
"b",
"c"
]
]
}
}
}
]
}
},
{
_id: 0,
id: 1
})
这个查询只能返回一个具有id = 3
的文档,因为在这种情况下,我使用的是给定的数组=["a","b","c"]。但是,是否可以根据给定的数组(如["a"、"b"、"c"、"d"](获取所有文档,这意味着如果任何文档具有给定数组的至少一个匹配值,那么查询应该返回这些文档的id
?
感谢
您可以使用$in
。我想你在$elemMatch
里面没有任何条件,你可以直接访问"key.labels":{$in:[....]}
db.collection.find({
key: {
$elemMatch: {
labels: {
$in: [
"a",
"b",
"c",
"d"
]
}
}
}
},
{
_id: 0,
id: 1
})
正在工作的Mongo游乐场