Пример:
ичок в MongoDB, у меня есть две коллекции, как это:
1-е название коллекции
db.a.find ()
{
"_id": "1234",
"versions": [{
"owner_id": ObjectId("100000"),
"versions": 1,
"type" : "info",
"items" : ["item1","item3","item7"]
},
{
"owner_id": ObjectId("100001"),
"versions": 2,
"type" : "bug",
"OS": "Ubuntu",
"Dependencies" : "Trim",
"items" : ["item1","item7"]
}
]}
2-я коллекция называется b
db.b.find ()
{
"_id": ObjectId("100000"),
"email": "[email protected]"
} {
"_id": ObjectId("100001"),
"email": "[email protected]"
}
Ожидаемый результат:
{
"_id": "1234",
"versions":[{
"owner_id": "[email protected]",
"versions": 1,
"type" : "info",
"items" : ["item1","item3","item7"]
},
{
"owner_id": "[email protected]",
"versions": 2,
"type" : "bug",
"OS": "Ubuntu",
"Dependencies" : "Trim",
"items" : ["item1","item7"]
}
] }
Требование: поля внутри каждого документаверсии не зафиксированы, пример:версии [0] иметь 4 пары ключ-значение иверсии [1] есть 6 пар ключ-значение. поэтому я ищу запрос, который может заменитьowner_id с участиемэлектронное письмо сохраняя все остальные поданные в выходной.
Я пытался :
db.a.aggregate(
[
{$unwind:"$versions"},
{$lookup : {from : "b", "localField":"versions.owner_id", "foreignField":"_id", as :"out"}},
{$project : {"_id":1, "versions.owner_id":{$arrayElemAt:["$out.email",0]}}},
{$group:{_id:"$_id", versions : {$push : "$versions"}}}
]
).pretty()
Пожалуйста помоги.
Благодарю вас!!!