【问题标题】:How to use aggregate to count the documents如何使用聚合来计算文档
【发布时间】:2016-03-18 19:16:18
【问题描述】:

我有这样的文件:

{ 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 }

部分数据未显示。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    如果您需要计算total 字段的总数,正确的聚合将是:

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

    这将按uid 过滤集合,然后计算按tiduid 分组的所有total 字段的总和,并将其向后排序bu total

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 2016-02-06
      • 2018-07-22
      • 2017-02-10
      • 2017-12-10
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      相关资源
      最近更新 更多