在 MongoDB 的嵌套数组字段中查找仅包含预期值的文档
Find document with only expected values allowed in nested array field in MongoDB
我将从示例开始,因为它对我来说更容易解释。
[
{
"_id": 100,
"narr": [
{
"field": 1
}
]
},
{
"_id": 101,
"narr": [
{
"field": 1,
},
{
"field": 2
}
]
}
]
目标是找到与我为 field
.
指定的值完全一致的文档
示例:
对于 lookup = [1]
查找包含 _id=100
.
的文档
对于 lookup = [1,2]
查找包含 _id=101
.
的文档
到目前为止,我想出了(对于 [1,2] 的第二个例子):
db.col.find(
{
"narr": {
"$all": [
{
"$elemMatch": {
"field": {
"$in": [1, 2]
}
}
}
]
}
}
)
但它还包括 _id=100
的文档。如何让它执行严格匹配?
构建整个数组将不起作用,因为每个嵌套结构中都有多个具有未知值的字段。
不考虑 field
和您输入的重复,您可以简单地在 narr.field
上查找。这就像对数组执行搜索,其中的值来自 field
.
db.collection.find({
$expr: {
$eq: [
"$narr.field",
[
1,
2
]
]
}
})
这里是Mongo playground供您参考。
如果可能出现重复,请尝试使用$setEquals
。
db.collection.find({
$expr: {
"$setEquals": [
"$narr.field",
[
1,
2
]
]
}
})
这里是Mongo playground供您参考。
我将从示例开始,因为它对我来说更容易解释。
[
{
"_id": 100,
"narr": [
{
"field": 1
}
]
},
{
"_id": 101,
"narr": [
{
"field": 1,
},
{
"field": 2
}
]
}
]
目标是找到与我为 field
.
指定的值完全一致的文档
示例:
对于 lookup = [1]
查找包含 _id=100
.
的文档
对于 lookup = [1,2]
查找包含 _id=101
.
的文档
到目前为止,我想出了(对于 [1,2] 的第二个例子):
db.col.find(
{
"narr": {
"$all": [
{
"$elemMatch": {
"field": {
"$in": [1, 2]
}
}
}
]
}
}
)
但它还包括 _id=100
的文档。如何让它执行严格匹配?
构建整个数组将不起作用,因为每个嵌套结构中都有多个具有未知值的字段。
不考虑 field
和您输入的重复,您可以简单地在 narr.field
上查找。这就像对数组执行搜索,其中的值来自 field
.
db.collection.find({
$expr: {
$eq: [
"$narr.field",
[
1,
2
]
]
}
})
这里是Mongo playground供您参考。
如果可能出现重复,请尝试使用$setEquals
。
db.collection.find({
$expr: {
"$setEquals": [
"$narr.field",
[
1,
2
]
]
}
})
这里是Mongo playground供您参考。