Możesz przejść do trasy struktury agregacji, która może spłaszczyć tablice za pomocą $unwind
operator. Spowoduje to wygenerowanie nowego rekordu dla każdego elementu pola danych listy, do którego zastosowano unwind. Zasadniczo spłaszcza dane.
Po spłaszczeniu danych będziesz potrzebował $lookup
operator do "dołączenia" do products
pole do products
kolekcja. Powtórz ten proces dla schematu zagnieżdżonych owoców.
Zobaczmy przykład (nieprzetestowany), aby lepiej to zrozumieć
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);
})
ZASTRZEŻENIE :Powyższy kod jest nieprzetestowanym kodem, który służy jedynie jako przewodnik przy założeniu, że uruchamiasz kod w środowisku testowym z najnowszymi wersjami MongoDB i mongoose, które obsługują $lookup
operator AND, że możesz wykonać to samo zapytanie agregujące w powłoce mongo.