【发布时间】:2022-02-22 09:30:03
【问题描述】:
我正在尝试从 users 集合构建聚合查询。每个用户都有一个在 clients 集合数组中关联的 id 属性:
// users...
[
{
id: '12345',
name: 'John'
}
// ...
}
// clients...
[
{
name: 'Foo',
members: [ { id: '1234', role: 'Admin' } ]
},
// ....
]
所以我要做的是聚合users 集合并执行$lookup 以“加入”用户所属的客户端(通过id)
db.users.aggregate([
$lookup: {
from: 'clients',
as: 'clients',
let: { user_id: '$id' },
pipeline: [
{
$match: {
members: {
$elemMatch: { id: '$user_id' },
},
},
},
],
};
}])
如果我将任何用户的 ID 硬编码到 $elemMatch(替换 $user_id)中,它可以工作,但我似乎无法让它作为 user 记录中的变量工作。
【问题讨论】:
-
嵌套管道中的 $$ 是双倍的:
$elemMatch: { id: '$$user_id' },
标签: mongodb