【发布时间】:2019-12-09 06:14:09
【问题描述】:
我有 2 个收藏。我想对与 ID 匹配的集合 A 进行聚合。从那里,我想从集合 B 中查找集合 A(本地字段)中匹配的 ID 在集合 B(外部字段)的数组中。
所以基本上:
集合 A:
{
_id: ObjectId('<id>')
},
{
_id: ObjectId('<id>')
},
{
_id: ObjectId('<id>')
}
集合 B:
{
_id: ObjectId('<id>'),
related: ['<id>', '<id>', '<id>', '<id>']
},
{
_id: ObjectId('<id>'),
related: ['<id>', '<id>', '<id>', '<id>']
},
{
_id: ObjectId('<id>'),
related: ['<id>', '<id>', '<id>', '<id>']
}
查询:
db.collection_a.aggregate({
[$match: {_id: ObjectId('<id>')}],
// other $lookups...
[
$lookup: {
as: 'collection_b',
from: 'collection_b',
let: {id: '$_id'},
pipeline: [
{
$match: {
$expr: {$in: ['$related', '$$id']}
}
}
// sorts, projections, etc...
]
}
]
// sorts, projections, etc...
});
期望的结果:
[
{
_id: ObjectId('<id>'),
collection_b: [
{
_id: ObjectId('<id>'),
related: ['<id>', '<id>', '<id>', '<id>']
},
{
_id: ObjectId('<id>'),
related: ['<id>', '<id>', '<id>', '<id>']
}
]
},
]
结果:
$in requires an array as a second argument, found: objectId
现在,我知道可以切换它并在 Collection B 上查找 Collection A,但是,在这种情况下,这不是一个选项(仍然应该查询 Collection A,即使它不存在于集合 B)。最好将其保留为一个查询。
非常感谢任何帮助。
【问题讨论】:
标签: mongodb aggregation-framework