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