当在mongodb中的字段中找到任何数组元素时,查询所有文档



我有一个这样的文档:

[
{
"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游乐场

最新更新