我有两个集合,我想从两者中获取字段,所以我在聚合管道中使用$lookup
。
这很好用并返回所有带有额外字段的文档,一个带有0或1个元素的数组(一个对象)。如果是0个元素,则意味着JOIN
(在SQL世界中)没有返回任何内容。如果是1个元素,则表示存在匹配,并且对象中的元素具有第二个集合的字段。
现在我有了这些结果,我想使用$match
来过滤一些结果。
为了使用$match
,我首先要在新的额外字段上使用$unwind
来提取数组。问题是,一旦我插入$unwind
阶段,查询的结果就是单个文档。
为什么会这样?我如何$unwind
然后$match
我从$lookup
阶段获得的所有文件?
答案 0 :(得分:2)
假设我们在lookup
之后有文件:
{doc:{_id:1, lookupArray:[{doc:1},{doc:2}]}}
和
{doc:{_id:2, lookupArray:[/* empty */]}}
当我们$unwind
没有任何选项时,我们会得到:
当我们指定
时 { $unwind: { path: "$array", preserveNullAndEmptyArrays: true } }
然后我们会得到:
因此,当您想从lookupArray搜索值doc时,$match
将如下所示:
{$match:{'lookupArray.doc':2}}
欢迎任何评论!