我正在查询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
个阶段),但所有嵌入式数组元素都不满足{已删除{1}}:
{$match: {partNum: "1200664"}}
我在{
"recType" : "H1",
"progCount" : "097314238",
"items" : [
{
"qty" : "00027",
"partNum" : "1200664"
}
]
},
{
"recType" : "H1",
"progCount" : "175564685",
"items" : [
{
"qty" : "00027",
"partNum" : "1200664"
}
]
}
管道阶段进行了多次尝试,但我无法进行有效的调用,更不用说获得与上述类似的结果了。
我甚至想知道$redact
是否是正确的操作。
答案 0 :(得分:1)
您可能需要在$filter
阶段使用$project
来过滤数组元素。 $eq
中使用的cond
来过滤所有不匹配的数组元素
{
$project : {
items : { $filter : { input : "$items", as : "item", cond : { $eq : ["$$item.partNum" , "1200664"] } } }
}
}