MongoDB 聚合:从嵌入式数组中删除一些元素(编辑?)
MongoDB aggregation: remove some elements from embedded array (redact?)
我正在查询一个 MongoDB 集合来提取信息,因此只能进行聚合操作(即不能 update()
)。
来自多个形状类似的文档,其中每个文档都包含一个嵌入式数组,其中至少有一个文档带有 partNum : "1200664"
字段):
{
"recType" : "H1",
"progCount" : "097314238",
"items" : [
{
"qty" : "00011",
"partNum" : "4471719"
},
{
"qty" : "00027",
"partNum" : "1200664"
}
]
},
{
"recType" : "H1",
"progCount" : "175564685",
"items" : [
{
"qty" : "00027",
"partNum" : "1200664"
}
]
}
我正在尝试获得以下结果,其中每个文档都保持其形状(因此不允许 $unwind
或 $replaceRoot
阶段),但所有嵌入的数组元素都不满足一个 {$match: {partNum: "1200664"}}
被删除:
{
"recType" : "H1",
"progCount" : "097314238",
"items" : [
{
"qty" : "00027",
"partNum" : "1200664"
}
]
},
{
"recType" : "H1",
"progCount" : "175564685",
"items" : [
{
"qty" : "00027",
"partNum" : "1200664"
}
]
}
我在 $redact
管道阶段做了几次尝试,但我无法提出有效的调用,更不用说获得与上述类似的任何结果了。
我什至想知道 $redact
是否是这里的正确操作。
您可能需要在 $project
阶段使用 $filter
来过滤数组元素。 $eq
用于cond
过滤所有不匹配的数组元素
{
$project : {
items : { $filter : { input : "$items", as : "item", cond : { $eq : ["$$item.partNum" , "1200664"] } } }
}
}
我正在查询一个 MongoDB 集合来提取信息,因此只能进行聚合操作(即不能 update()
)。
来自多个形状类似的文档,其中每个文档都包含一个嵌入式数组,其中至少有一个文档带有 partNum : "1200664"
字段):
{
"recType" : "H1",
"progCount" : "097314238",
"items" : [
{
"qty" : "00011",
"partNum" : "4471719"
},
{
"qty" : "00027",
"partNum" : "1200664"
}
]
},
{
"recType" : "H1",
"progCount" : "175564685",
"items" : [
{
"qty" : "00027",
"partNum" : "1200664"
}
]
}
我正在尝试获得以下结果,其中每个文档都保持其形状(因此不允许 $unwind
或 $replaceRoot
阶段),但所有嵌入的数组元素都不满足一个 {$match: {partNum: "1200664"}}
被删除:
{
"recType" : "H1",
"progCount" : "097314238",
"items" : [
{
"qty" : "00027",
"partNum" : "1200664"
}
]
},
{
"recType" : "H1",
"progCount" : "175564685",
"items" : [
{
"qty" : "00027",
"partNum" : "1200664"
}
]
}
我在 $redact
管道阶段做了几次尝试,但我无法提出有效的调用,更不用说获得与上述类似的任何结果了。
我什至想知道 $redact
是否是这里的正确操作。
您可能需要在 $project
阶段使用 $filter
来过滤数组元素。 $eq
用于cond
过滤所有不匹配的数组元素
{
$project : {
items : { $filter : { input : "$items", as : "item", cond : { $eq : ["$$item.partNum" , "1200664"] } } }
}
}