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"] } } }
    }
}