【发布时间】:2019-02-17 02:59:05
【问题描述】:
我对 mongodb 聚合比较陌生,我有一个小问题:
我想在两个集合之间进行连接。问题是,外部字段被放置在内部数组中。这意味着我必须展开数组才能进行正确的 $match。在我的 $match 中,我使用 $epxr 和 $eq 来对展开的文档进行连接(这是有意的,因此不是问题)。需要 $expr 来访问原始集合中的变量:
[
...
{
$lookup: {
from: 'foreignCollection',
as: 'field',
let: {
localField: '$someComparisonField'
},
pipeline: [
{
$unwind: '$arr'
},
{
$match: {
$expr: {
$eq: [ '$arr.foreignField', '$$localField' ]
}
}
}
]
}
}
]
但是field 在我的结果集中始终是一个空数组。我真的不知道我做错了什么:D
有人可以帮我吗?
编辑: 根据要求,两个涉及的集合的一些示例数据:
原始收藏:
{
...
someComparisonField: 1
},
{
...
someComparisonField: 2
}
foreignCollection:
{
...
arr: [
{
...
foreignField: 1
},
{
...
foreignField: 1
},
{
...
foreignField: 2
},
]
},
{
...
arr: [
{
...
foreignField: 1
},
{
...
foreignField: 2
},
{
...
foreignField: 2
},
]
},
{
...
arr: [
{
...
foreignField: 2
},
{
...
foreignField: 1
},
{
...
foreignField: 2
},
]
},
编辑 2:
我忘了添加一个小细节:在内部管道中使用 $eq,我正在访问一个固定索引,这意味着 foreignField 实际上看起来像这样:foreignField: [ <value> ]。
【问题讨论】:
-
你能发布你的样本集吗
-
@AnthonyWinzlet 已更新 :)
-
我看不出上面的代码有什么问题。可能是集合名称不正确。
-
@AnthonyWinzlet 你能看看我的回答吗?我做了一些进一步的调查......
标签: mongodb aggregation-framework