Можете да преминете към маршрута на рамката за агрегиране, която има капацитета да изравнява масивите чрез $unwind
оператор. Това ще генерира нов запис за всеки един елемент от полето с данни на списъка, към което се прилага отвиване. По същество изравнява данните.
След изравняване на данните ще ви е необходим $lookup
оператор за извършване на „присъединяване“ към products
поле към products
колекция. Повторете процеса за схемата на вложените плодове.
Нека видим пример (непроверен), за да разберем това по-добре
var Schema = require('../model/schema');
Schema.Shop.aggregate([
{ "$unwind": "$products" },
{
"$lookup": {
"from": "products",
"localField": "products",
"foreignField": "_id",
"as": "product"
}
},
{ "$unwind": "$product" },
{ "$unwind": "$product.fruits" },
{
"$lookup": {
"from": "fruits",
"localField": "product.fruits",
"foreignField": "_id",
"as": "fruits"
}
},
{
"$project": {
"nameShop": 1,
"nameProduct": "$product.nameProduct",
"nameFruit": "$fruits.nameFruit",
"price": "$fruits.price",
}
}
]).exec(function (err, result){
if (err) throw err;
console.log(result);
})
ОТКАЗ ОТ ОТГОВОРНОСТ :Горното е нетестван код, който служи само като ръководство, като се направят няколко предположения, че изпълнявате кода в тестова среда с най-новите версии на MongoDB и mongoose, които поддържат $lookup
оператор И, че можете да изпълните същата заявка за агрегиране в mongo shell.