问题描述
在Element
内,我有一个associations
的数组,这些关联是一个集合。
此集合obj
由许多键组成,这些键中有一些元素引用其他集合(obj
,obj2
),我想填充这两个集合。
但是我什至无法尝试执行尽可能少的操作,我也无法理解它。
据我了解,也许您需要使用$unwind
。
元素:
{
_id: "",element: "",associations: [],updatedAt: "",createdAt: ""
}
协会:
{
_id: "",code: "",obj: "5s5s55s5d555dff",//populate - Schema.Types.ObjectId - ref: 'objGroup'
obj2: "5f5e5e5e5d5d5d5",//populate - Schema.Types.ObjectId - ref: 'obj2Group'
updatedAt: "",createdAt: ""
}
在元素中:
aggregate.push({
$lookup: {
from: 'associations',let: { cId: '$_id' },pipeline: [
{ $match: { $expr: { $eq: ['$code','$$cId'] } } },{ $match: { $or: getTimeRange(from,to) } }
],as: 'associations'
}
})
解决方法
您可以在查找管道中使用嵌套查找,
db.element.aggregate([
{
$lookup: {
from: "associations",let: { cId: "$_id" },pipeline: [
{ $match: { $expr: { $eq: ["$code","$$cId"] } } },{ $match: { $or: getTimeRange(from,to) } },{
$lookup: {
from: "objCollection",localField: "obj",foreignField: "_id",as: "obj"
}
},{ $unwind: "$obj" },{
$lookup: {
from: "obj2Collection",localField: "obj2",as: "obj2"
}
},{ $unwind: "$obj2" }
],as: "associations"
}
}
])