Je zou de aggregatieraamwerkroute kunnen volgen, die de capaciteit heeft om de arrays af te vlakken via de $unwind
exploitant. Dit genereert een nieuw record voor elk element van het lijstgegevensveld waarop afwikkelen wordt toegepast. Het vlakt in feite de gegevens af.
Na het afvlakken van de gegevens heeft u de $lookup
operator om een "join" te doen op de products
veld naar de products
verzameling. Herhaal het proces voor het schema voor geneste vruchten.
Laten we een voorbeeld bekijken (niet getest) om dit beter te begrijpen
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);
})
DISCLAIMER :Het bovenstaande is niet-geteste code die alleen als richtlijn dient door een aantal aannames te doen dat u de code uitvoert in een testomgeving met de nieuwste MongoDB- en mangoestversies die de $lookup
operator AND dat u dezelfde aggregatiequery kunt uitvoeren in mongo-shell.