ale*_*nst 5 mongodb aggregation-framework
我有两个集合,我想从两个集合中获取字段,所以我$lookup在聚合管道中使用。
这工作正常并返回所有带有额外字段的文档,一个包含 0 或 1 个元素(一个对象)的数组。如果为 0 个元素,则表示JOIN(在 SQL 世界中)没有返回任何内容。如果为 1 个元素,则表示存在匹配且该元素在具有第二个集合的字段的对象中。
现在我有了这些结果,我想用$match它来过滤一些结果。
为了使用,$match我首先想$unwind在那个新的额外字段上使用以提取数组。问题是一旦我插入$unwind舞台,查询的结果就是单个文档。
为什么会这样?我怎么能$unwind然后$match所有我从$lookup舞台上得到的文件?
假设我们有以下文件lookup:
{doc:{_id:1, lookupArray:[{doc:1},{doc:2}]}}
Run Code Online (Sandbox Code Playgroud)
和
{doc:{_id:2, lookupArray:[/* empty */]}}
Run Code Online (Sandbox Code Playgroud)
当我们$unwind没有任何选择时,我们将得到:
当我们指定
{ $unwind: { path: "$array", preserveNullAndEmptyArrays: true } }
Run Code Online (Sandbox Code Playgroud)
然后我们会得到:
因此,当您想从 lookupArray 中搜索值文档时,$match将如下所示:
{$match:{'lookupArray.doc':2}}
Run Code Online (Sandbox Code Playgroud)
欢迎任何意见!
| 归档时间: |
|
| 查看次数: |
8041 次 |
| 最近记录: |