Вы можете попробовать следующую функцию агрегирования для достижения результата ...
Если у вас версия mongodb 3.6
db.promotion.aggregate([
// stage 1
{ "$lookup": {
"from": Promotions.collection.name,
"let": { "tags": "$tags" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$_id", "$$tags" ] } } }
],
"as": "tags"
}},
// stage 2
{ "$addFields": {
"tags": { "$arrayElemAt": [ "$tags", 0 ] }
}},
// stage 3
{ "$group": {
"_id": "$tags._id",
"promotions": {
"$push": {
"fieldName1": "$fieldName1",
"fieldName2": "$fieldName2",
}
}
}}
])
Если у вас версия mongodb до 3,6
db.promotion.aggregate([
{ "$lookup": {
"from": Promotions.collection.name,
"localField": "tags",
"foreignField": "_id"
"as": "tags"
}},
{ "$unwind": "tags" },
{ "$group": {
"_id": "$tags._id",
"promotions": {
"$push": {
"fieldName1": "$fieldName1",
"fieldName2": "$fieldName2",
}
}
}}
])
Оба будут давать одинаковый вывод
{
"tag": {
"_id": "999",
"value": "Lorem Ipsum"
},
"promotions": [{
"_id": "0001",
"value": "Value of promotion Nº1"
},
{
"_id": "0002",
"value": "Value of promotion Nº2"
}
]}
}