Mongodb “展开”:{“PreserveNullAndEmptyArray”:false}在v3.4 aggregate$lookup中不起作用

Mongodb “展开”:{“PreserveNullAndEmptyArray”:false}在v3.4 aggregate$lookup中不起作用,mongodb,Mongodb,我正在尝试使用查找阶段运行聚合管道。 管道需要很长时间,所以我决定在展开阶段通过删除带有空数组的文档来优化管道 mongo站点上的文档建议,这应该可以在v3.4中使用 我的查找阶段如下所示 { "$lookup": { "from": "abc", "localField": "abc_id", "foreignField": "abc_id", "as": "abc_info

我正在尝试使用查找阶段运行聚合管道。 管道需要很长时间,所以我决定在展开阶段通过删除带有空数组的文档来优化管道

mongo站点上的文档建议,这应该可以在v3.4中使用

我的查找阶段如下所示

    {
        "$lookup": {
            "from": "abc",
            "localField": "abc_id",
            "foreignField": "abc_id",
            "as": "abc_info",
            "unwinding": { "preserveNullAndEmptyArrays": false }
        }
     }
我犯了错误

    "arguments to $lookup must be strings, unwinding: { 
    preserveNullAndEmptyArrays: false } is type object"

根据文档,只有$unwind支持PreserveNullandEmptyArray,而不是$lookup。顺便说一句,Mongo的优化器为您将$unwind添加到$lookup阶段,因此可以在单独的阶段添加$unwind。更多关于查询优化的资料+您的$unwind+$lookup的具体示例

这是因为$lookup中没有unwind选项

$unwind是聚合中的另一个不同阶段

在查询中进行以下更改:

 {"$lookup": {
    "from": "abc",
    "localField": "abc_id",
    "foreignField": "abc_id",
    "as": "abc_info",
}},
{$unwind: {
    path: "$abc_info"      //preserveNullAndEmptyArrays is false by default.
}}

这样就可以了。

因此,如果我不想解开空列表,我必须在查找之后添加一个匹配阶段,以减少我要解开的文档数量。@elisharobinson我相信这是真的。