2016-03-18 5 views
0

У меня есть документы, как:Как использовать агрегат для подсчета документов

{ uid:2, tid: 100 }, 
{ uid:2, tid: 100 }, 
{ uid:2, tid: 103 }, 
{ uid:3, tid: 103 }, 
{ uid:3, tid: 100 }, 
{ uid:3, tid: 100 }, 
{ uid:8, tid: 103, total: 1 } 

Я хочу статистики в подсчет же UID и TID

{ uid: 2, tid: 100, total: 2}, 
{ uid: 2, tid: 103, total: 1}, 
{ uid: 3, tid: 100, total: 2}, 
{ uid: 3, tid: 103, total: 1 } 

Я пытаюсь использовать

db.collection.aggregate([ 
    { $match: { uid: { $in: [ "2", "3" ] } } }, 
    { $group: { _id: "$tid", total: { $sum: 1 } } }, 
    { $sort: { total: -1 } } 
]) 

затем я получаю данные, подобные

{ 
    "result" : [ 
      { 
       "_id" : "100", 
       "uid" : "2", 
       "total" : 2.0000000000000000 
      }, 
      { 
       "_id" : "103", 
       "student" : "2", 
       "total" : 1.0000000000000000 
      } 
     ], 
     "ok" : 1.0000000000000000 } 

некоторые данные не показаны.

ответ

0

Если вам нужно подсчитать всего total полей правильная агрегация будет:

db.collection.aggregate([ 
    { $match: { uid: { $in: ["2","3"] } } }, 
    { $group: { 
     _id: { tid: "$tid", uid: "$uid" }, 
     total: { $sum: "$total" } 
     } 
    }, 
    { $sort: { total: -1 } } 
]) 

Это будет фильтровать коллекцию по uid затем подсчитать сумму всех total полей, сгруппированных по tid и uid и сортирует его в обратном направлении бу total ,

Смежные вопросы