Javascript MongoDB在$lookup上聚合多个本地字段
我使用一个聚合来为每个父文档获取4个子文档。但子文档都来自同一个集合Javascript MongoDB在$lookup上聚合多个本地字段,javascript,node.js,mongodb,aggregate,Javascript,Node.js,Mongodb,Aggregate,我使用一个聚合来为每个父文档获取4个子文档。但子文档都来自同一个集合 [ { '$lookup': { 'from': 'Roles', 'localField': 'dentistId', 'foreignField': '_id', 'as': 'DENTIST' } }, { '$lookup': { 'from': 'Roles', 'localField': 'doct
[
{
'$lookup': {
'from': 'Roles',
'localField': 'dentistId',
'foreignField': '_id',
'as': 'DENTIST'
}
}, {
'$lookup': {
'from': 'Roles',
'localField': 'doctorId',
'foreignField': '_id',
'as': 'DOCTOR'
}
}, {
'$lookup': {
'from': 'roles',
'localField': 'lawyerId',
'foreignField': '_id',
'as': 'LAWYER'
}
}, {
'$lookup': {
'from': 'roles',
'localField': 'ceoId',
'foreignField': '_id',
'as': 'CEO'
}
}
]
我使用的是MongoDB>4的一个版本。我希望只使用1$lookup
,然后执行以下操作
localField: { $in:[dentistId, doctorId, lawyerId, ceoId }
有没有办法巩固这一点
谢谢 - 您可以添加一个字段
,并在其中推送所有IDchildDocs
- 在
localField
有没有办法保证返回角色的顺序?也就是说,根据上面的例子,如果
childDocs
(来自$lookup)数组是牙医、医生、律师、ceo,那就太好了(因此,$addFields中的childDocs的顺序是no,它不能保证文档按照输入ID的顺序。但是我可以说,返回文档的顺序将与当前实际集合中的顺序相同,即一个集合中的4个文档的顺序[1,2,3,4]
,如果我使用{field:{$in:[1,2]}
进行查询,它将返回[1,2]
,如果我使用{field:{$in:[2,1]}}
进行查询,它将返回与第一次查询相同的[1,2]
,返回实际集合中存在的相同顺序。
[
{
$addFields: {
childDocs: [
"$dentistId",
"$doctorId",
"$lawyerId",
"$ceoId"
]
}
},
{
'$lookup': {
'from': 'roles',
'localField': 'childDocs',
'foreignField': '_id',
'as': 'childDocs'
}
}
]