我有一些文件:
{ 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 :(得分: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
。