При поиске вы сохраняете его как matching document
, в результате получается members
.
Это заменяет ваш существующий объект members
из вашего $$ROOT
Чтобы сохранить исходный $members
от companies
, а также $members
от людей.
Вам потребуется merge
оба объекта в фазе $project
.
Вот разбивка конвейера:
Фаза 1 : $unwind
на $members
для извлечения массива элементов на уровне $ ROOT.
Phase2 : $lookup
документ из коллекции people
и сохраните его под атрибутом fromPeople
.
Фаза 3 : Предполагая, что у вас есть только один соответствующий документ от People, объедините элемент объекта в массив индекс 0, с $ROOT.members
, сохранить объединенный объект в атрибуте members
.
db.companies.aggregate([
{
$unwind:{path: "$members"}
},
{
"$lookup": {
"from": "people",
"localField": "members._id",
"foreignField": "_id",
"as": "fromPeople"
}
},
{
$project: {
members: { $mergeObjects: [ { $arrayElemAt: [ "$fromPeople", 0 ] }, "$$ROOT.members" ] },
}
}
])
Вывод
{
"_id" : "5eeec400d655e7af27b07d8a",
"members" : {
"_id" : "5eeec400d65ddddd5555",
"name" : "John DO",
"gender" : "male",
"status" : false
}
}