Du kunne gå aggregationsrammeruten, som har kapaciteten til at udjævne arrays gennem $unwind
operatør. Dette vil generere en ny post for hvert eneste element i listedatafeltet, som afvikling anvendes på. Det flader grundlæggende dataene ud.
Efter at have udjævnet dataene vil du kræve $lookup
operatør for at lave et "join" på products
feltet til products
kollektion. Gentag processen for det indlejrede frugtskema.
Lad os se et eksempel (utestet) for at forstå dette bedre
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);
})
ANSVARSFRASKRIVELSE :Ovenstående er utestet kode, som kun tjener som en vejledning ved at gøre et par antagelser om, at du kører koden i et testmiljø med de seneste MongoDB- og mongoose-versioner, der understøtter $lookup
operator OG at du kan udføre den samme aggregeringsforespørgsel i mongo shell.