$unwind
オペレーター。これにより、アンワインドが適用されるリストデータフィールドのすべての要素に対して新しいレコードが生成されます。基本的にデータをフラット化します。
データをフラット化した後、 $lookup
products
で「結合」を行う演算子 products
へのフィールド コレクション。ネストされたフルーツスキーマに対してこのプロセスを繰り返します。
これをよりよく理解するための例(未テスト)を見てみましょう
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);
})
免責事項 :上記はテストされていないコードであり、 $lookup
演算子ANDは、mongoシェルで同じ集計クエリを実行できることを意味します。