我正在尝试为文档中的嵌入式数组检索一些查找数据。以下是数据样本:
[
{
"_id": "58a4fa0e24180825b05e14e9",
"user_id": "589cf6511b94281f34617a13",
"user": {
"firstname": "John",
"lastname": "Doe"
},
"stages": [
{
"user_id": "589cf6511b94281f34617a13"
},
{
"user_id": "589cf6511b94281f346343c3"
}
],
}
]
如您所见,stages
是一个数组,仅包含user_id
个字段。这些指向另一个名为_id
的集合中的users
字段。
以下是我获得上述结果的方法:
db.collection('things').aggregate([{
$match: finder
},
{
$lookup: {
from: 'users',
localField: 'user_id',
foreignField: '_id',
as: 'user'
}
},
{
$unwind: '$user'
}
]);
现在,这非常简单:选择一些记录,user
字段用$lookup
查找。但是我如何对stages
的元素做同样的事情呢?期望的结果是:
[
{
"_id": "58a4fa0e24180825b05e14e9",
"user_id": "589cf6511b94281f34617a13",
"user": {
"firstname": "John",
"lastname": "Doe"
},
"stages": [
{
"user_id": "589cf6511b94281f34617a13",
"firstname": "John",
"lastname": "Doe"
},
{
"user_id": "589cf6511b94281f346343c3"
"firstname": "Jane",
"lastname": "Doe"
}
],
}
]
答案 0 :(得分:1)
我相信你所缺少的是在阶段中的放松和在它之后的群组通话。我测试了以下代码并得到了类似的结果:
db.collection('things').aggregate([
{ $match: finder },
{ $lookup: { from: 'users',
localField: 'user_id',
foreignField: '_id',
as: 'user'
}
},
{ $unwind: '$stages' },
{$lookup : {from : 'users', localField: 'stages.user_id', foreignField: '_id', as : 'stages'}},
{$group : { _id: '$_id', userId: "$userId",..., stages: {$push : "$stages"}}}
]);
希望我的代码很有用