2017-01-14 5 views
2

私はいくつかの集計を行って、そこにいくつの商品があるかに関する統計を取得しています。私はこれまでだいくつかの配管後

[ 
    { 
    topCategory: "Computer", 
    mainCategory: "Stationary" 
    }, 
    { 
    topCategory: "Computer", 
    mainCategory: "Laptop" 
    }, 
    { 
    topCategory: "Computer", 
    mainCategory: "Stationary" 
    }, 
    { 
    topCategory: "Computer", 
    mainCategory: "Stationary" 
    }, 

]

募集出力:これまで

[ 
    { 
    name: "Computer", 
    count: 4, 
    mainCategories: [ 
     { 
     name: "Laptop", 
     count: 2 
     }, 
     { 
     name: "Stationary", 
     count: 2 
     } 
    ] 
    } 
] 

マイクエリ:私は知っている

let query = mongoose.model('Product').aggregate([ 
    { 
     $match: { 
     project: mongoose.Types.ObjectId(req.params.projectId) 
     } 
    }, 
    { $project: { 
     _id: 0, 
     topCategory: '$category.top', 
     mainCategory: '$category.main', 
     } 
    }, 
]); 

私はを使用する必要がありますと$sumを組み合わせたもの。私は別の方法を試みたが、それを働かせることはできない。この場合

+0

使用グループ '{ \t \t \t $グループ以下のようにtopCategoryによってそのグループ:{ \t \t \t \t _id: "$ topCategory"、 \t \t \t \t "count":{$ sum:1}、 mainCategories:{$ push:{name: "$ mainCategory"}} \t \t \t \t} \t \t \t} \t \t} ' –

答えて

2

mainCategoryによる最初のあなたがすべきグループと

db.collection.aggregate({ 
    $group: { 
    _id: "$mainCategory", 
    "count": { 
     $sum: 1 
    }, 
    "data": { 
     "$push": "$$ROOT" 
    } 
    } 
}, { 
    "$unwind": "$data" 
}, { 
    "$group": { 
    "_id": "$data.topCategory", 
    "count": { 
     "$sum": 1 
    }, 
    "mainCategories": { 
     "$addToSet": { 
    "name": "$_id", 
    "count": "$count" 
     } 
    } 
    } 
}).pretty()