Potresti seguire il percorso del framework di aggregazione, che ha la capacità di appiattire gli array attraverso il $unwind
operatore. Questo genererà un nuovo record per ogni elemento del campo dati dell'elenco su cui è applicato lo svolgimento. Fondamentalmente appiattisce i dati.
Dopo aver appiattito i dati, avresti bisogno di $lookup
operatore per fare un "unirsi" sui products
campo ai products
collezione. Ripetere il processo per lo schema dei frutti nidificati.
Vediamo un esempio (non testato) per capirlo meglio
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);
})
ESONERO DI RESPONSABILITÀ :Quanto sopra è un codice non testato che funge solo da guida ipotizzando che si stia eseguendo il codice in un ambiente di test con le ultime versioni di MongoDB e mongoose che supportano $lookup
operatore E che puoi eseguire la stessa query di aggregazione in mongo shell.