2

我正在查询 MongoDB 集合以提取信息,因此只能进行聚合操作(即 no 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阶段),但所有不满足 a 的嵌入式数组元素{$match: {partNum: "1200664"}}都被删除:

{
    "recType" : "H1",
    "progCount" : "097314238",
    "items" : [ 
        {
            "qty" : "00027",
            "partNum" : "1200664"
        }
    ]
},
{
    "recType" : "H1",
    "progCount" : "175564685",
    "items" : [ 
        {
            "qty" : "00027",
            "partNum" : "1200664"
        }
    ]
}

我在管道阶段做了几次尝试$redact,但我无法提出有效的调用,更不用说获得与上述类似的任何结果。
我什至想知道$redact这里的操作是否正确。

4

1 回答 1

3

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

{
    $project : {
        items : { $filter : { input : "$items", as : "item", cond : { $eq : ["$$item.partNum" , "1200664"] } } }
    }
}
于 2018-01-23T10:50:23.443 回答