2
我想通過使用mongodb的聚合框架來做一個嵌套的人口,我有一些麻煩與它。
這是我最初的數據:
[
{
_id: ObjectId('123'),
profileId: ObjectId('456')
},
// ...other documents
]
我將此聚合管道,所以我可以用profileId
場填充profile
領域:
MyModel.aggregate([
{
$lookup: {
from: 'profiles',
localField: 'profileId',
foreignField: '_id',
as: 'profile'
}
},
{
$project: {
profile: {
$arrayElemAt: [ '$profile', 0 ]
},
profileId: 1,
}
},
]
而且這是結果:
[
{
_id: ObjectId('123'),
profileId: ObjectId('456'),
profile: {
grades: [
ObjectId('...'),
ObjectId('...')
]
// ... other props
}
}
// ...other documents
]
現在我加入了$lookup
擴大管道來填充每個profile
文檔裏面的等級:
MyModel.aggregate([
{
$lookup: {
from: 'profiles',
localField: 'profileId',
foreignField: '_id',
as: 'profile'
}
},
{
$project: {
profile: {
$arrayElemAt: [ '$profile', 0 ]
},
profileId: 1,
}
},
{
$lookup: {
from: 'profile-grades',
localField: 'profile._id',
foreignField: 'profile',
as: 'profile.grades'
}
}
]
這也是迄今爲止的結果:
[
{
_id: ObjectId('123'),
profileId: ObjectId('456'),
profile: {
grades: [
{
studyLocationId: ObjectId('789'),
// ... other props
},
// ... other grades
]
}
}
// ...other documents
]
,我是不能夠的最後一步實現grades
陣列內每個studyLocation
的人口。
通緝的結果:
{
$lookup: {
from: 'study-locations',
localField: 'profile.grades.studyLocationId',
foreignField: '_id',
as: 'profile.grades.studyLocation'
}
}
這種簡單的返回:
grades: {
studyLocation: []
}
我應該怎麼辦呢
[
{
_id: ObjectId('123'),
profileId: ObjectId('456'),
profile: {
grades: [
{
studyLocationId: ObjectId('789'),
studyLocation: {
_id: ObjectId('...'),
// other props
},
},
// ... other grades
]
}
}
// ...
]
我已經通過添加另一個$lookup
階段,但沒有運氣嘗試?這甚至有可能嗎? 謝謝!
對不起,我忘了指定它:我正在使用v3.4.5。 – Alerosa
然後你必須在「profile.grades」上使用「$ unwind」來使用「$ lookup」 – Shubham