2016-09-30 3 views
0

У меня есть пользовательские данныеКак мы можем группировать агрегат для разных совпадений?

users = [{ 
     name : 'z', 
     movie : 'yes', 
     finance : 'no' 
    }, 
{ 
    name : 'zee', 
    movie : 'no', 
    finance : 'yes'}, 
{ 
    name : 'zoo', 
    movie : 'yes' 
    }] 

мне нужно сгруппировать их как

{ 
totalUsers : 3, 
movieWatch : 2, 
financeUsed : 1, 
financeNotDone : 1 } 

Я пытался понять агрегат, но обнаружил, что мы можем сделать это за один матч или как я не понял правильно, пожалуйста, помогите мне

Я новичок в совокупности концепций.

+2

[Как насчет поиска?] (Http://stackoverflow.com/search?q=%5Baggregation-framework%5D+%24sum+%24cond+%24+group) – styvane

ответ

2

можно попробовать

db.getCollection('collectionName').aggregate([ 
    {$group:{ 
     _id: null, 
     totalUsers: {$sum:1}, 
     movieWatch: {$sum: {$cond: [ { $eq: [ "$movie", 'yes' ] }, 1, 0 ]}}, 
     financeUsed : {$sum: {$cond: [ { $eq: [ "$finance", 'yes' ] }, 1, 0 ]}}, 
     financeNotDone : {$sum: {$cond: [ { $eq: [ "$finance", 'no' ] }, 1, 0 ]}} 
     }} 
]); 
Смежные вопросы