ここで大まかに言えば、 $ project
「右側」のドキュメントのフィールドプロパティへの「絶対パス」に依存します。 1
などのショートカット その要素が実際にドキュメントの最上位にある場所のためだけのものです。
また、 $ group
、ここで、<などのさまざまなグループ化演算子を使用します。 code> $ first
および $ addToSet
または $ push
内部配列からプルしている情報を保持します。また、 $ unwind
ここでも2回、ドキュメント間で「タイプ」を組み合わせており、 $ first
この場合。
OrderModel.aggregate([
{ "$unwind": "$products" },
{ "$unwind": "$products.types" },
{ "$group": {
"_id": "$products.name",
"active": { "$first": "$products.active" },
"types": { "$addToSet": "$products.types" },
"quantity": { "$sum": 1 }
}},
{ "$project": {
"_id": 0,
"name": "$_id",
"active": 1,
"types": 1,
"quantity": 1
}}
],function(err,results) {
});