Sie könnten die Aggregation-Framework-Route wählen, die die Fähigkeit hat, die Arrays durch $unwind
Operator. Dadurch wird ein neuer Datensatz für jedes einzelne Element des Listendatenfelds generiert, auf das die Abwicklung angewendet wird. Es glättet im Grunde die Daten.
Nach dem Reduzieren der Daten benötigen Sie den $lookup
Operator, um einen "Join" für die products
durchzuführen Feld zu den products
Sammlung. Wiederholen Sie den Vorgang für das verschachtelte Fruchtschema.
Sehen wir uns ein Beispiel (ungetestet) an, um dies besser zu verstehen
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);
})
HAFTUNGSAUSSCHLUSS :Der obige Code ist ungetestet und dient nur als Richtlinie, da einige Annahmen getroffen werden, dass Sie den Code in einer Testumgebung mit den neuesten MongoDB- und Mongoose-Versionen ausführen, die den $lookup
Operator UND dass Sie dieselbe Aggregationsabfrage in der Mongo-Shell ausführen können.