我正在搜索更快的选项来匹配嵌套数组中字段中具有重复值的文档,匹配条件的示例文档:
{
"key": 2,
a: [
{
p: [
{
id: 2
},
{
id: 3
},
{
id: 3
}
]
}
]
}
我需要找到更快的方法来仅匹配具有重复 a.p.id 值的文档,在带有 key:2 的示例文档中具有重复的 a.p.id:3,这是否可能不使用 $uwind?
预期产出:
{ key:2 , id:3 }
或完整的匹配文件
我现在所拥有的是:https://mongoplayground.net/p/Qs7xuYQy-vQ
但我相信总有更好的东西......,我在想也许有 $reduce/$size 操作或 $push/$addToSet 可以接近我正在搜索的答案,但还没有确定......
一个选项是:
key
db.collection.aggregate([
{$project: {
cleanArr: {$reduce: {
input: "$a",
initialValue: [],
in: {$concatArrays: ["$$value", "$$this.p.id"]}
}},
key: 1,
_id: 0
}},
{$match: {
$expr: {$gt: [
{$size: "$cleanArr"},
{$size: {$setIntersection: ["$cleanArr"]}}
]}
}},
{$project: {
key: 1,
res: {$reduce: {
input: "$cleanArr",
initialValue: {arr: [], id: []},
in: {$cond: [
{$in: ["$$this", "$$value.arr"]},
{arr: "$$value.arr", id: {$concatArrays: ["$$value.id", "$$this"]]}},
{id: "$$value.id", arr: {$concatArrays: ["$$value.arr", ["$$this"]]}}
]}
}}
}},
{$project: {key: 1, id: "$res.id"}}
])