我有两个集合,我想从两个集合中获取字段,所以我使用 $lookup
在聚合管道中。
这工作正常并返回所有带有额外字段的文档,一个包含 0 或 1 个元素(一个对象)的数组。如果为 0 个元素,则表示 JOIN
(在 SQL 世界中)没有返回任何东西。如果为 1 个元素,则表示存在匹配且该元素在具有第二个集合的字段的对象中。
现在我有了这些结果,我想使用 $match
为了过滤一些结果。
为了使用$match
我首先想用$unwind
在那个新的额外字段上以提取数组。问题是一旦我插入 $unwind
阶段,查询的结果是单个文档。
为什么会这样?我该怎么办 $unwind
然后 $match
我从 $lookup
得到的所有文件阶段?
最佳答案
假设我们在 lookup
之后有文档:
{doc:{_id:1, lookupArray:[{doc:1},{doc:2}]}}
和
{doc:{_id:2, lookupArray:[/* empty */]}}
当我们
$unwind
没有任何选择,我们将得到:当我们指定
{ $unwind: { path: "$array", preserveNullAndEmptyArrays: true } }
然后我们会得到:
因此,当您想从 lookupArray 中搜索值文档时,
$match
看起来像这样: {$match:{'lookupArray.doc':2}}
欢迎任何意见!
关于mongodb - 在 MongoDB 中执行 $lookup 后使用 $match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38329199/