MongoDB聚合:从嵌入式数组中删除一些元素(编辑?)

时间:2018-01-23 10:30:53

标签: mongodb aggregation-framework mongodb-3.6

我正在查询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是否是正确的操作。

1 个答案:

答案 0 :(得分:1)

您可能需要在$filter阶段使用$project来过滤数组元素。 $eq中使用的cond来过滤所有不匹配的数组元素

{
    $project : {
        items : { $filter : { input : "$items", as : "item", cond : { $eq : ["$$item.partNum" , "1200664"] } } }
    }
}