MongoDB聚合查询以获取总计数

时间:2016-06-27 09:27:02

标签: javascript mongodb

我试图找到每天所有佣金的总和,但我不知道该怎么办,以下是mongoDB文件:

"operationData" : {
    "topUp" : {
        "topUpId" : "20160520182653940+043000001792098779520",
        "phoneNumber" : "792098779",
        "commission" : 4,
    }
}
}

{
    "_id" : 2,
    "dateTime" : ISODate("2016-06-20T13:56:53.970Z"),
    "operationData" : {
        "topUp" : {
            "topUpId" : "20160520182653940+043000001792098779520",
            "phoneNumber" : "792098779",
            "commission" : 6,
        }
    }
}

{
    "_id" : 3,
    "dateTime" : ISODate("2016-06-20T13:56:53.970Z"),
    "operationData" : {
        "topUp" : {
            "topUpId" : "20160520182653940+0430000017920987345243",
            "phoneNumber" : "792098779",
            "commission" : 5,
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您需要使用日期时间运算符ref here

名称说明

  1. $ dayOfYear以1到366(闰年)之间的数字返回日期的年份。
  2. $ dayOfMonth以1到31之间的数字返回日期的月中某天。
  3. $ dayOfWeek以1(星期日)至7(星期六)之间的数字返回日期的星期几。
  4. $ year以数字形式返回日期年份(例如2014年)。
  5. $ month以1(1月)和12(12月)之间的数字返回日期的月份。
  6. $ week返回日期的周数,作为0之间的数字(一年中第一个星期日之前的部分周)和53(闰年)。
  7. $ hour以0到23之间的数字返回日期的小时。
  8. $ minute以0到59之间的数字返回日期的分钟。
  9. $ second以0到60(闰秒)之间的数字返回日期的秒数。
  10. $ millisecond以0到999之间的数字返回日期的毫秒数。
  11. $ dateToString以格式化字符串形式返回日期。
  12. 所以你可以拥有这个片段

    db.operationData.aggregate([{
                $group : {
                    _id : {
                        dayOfYear : {
                            $dayOfYear : "$dateTime"
                        },
                        year : {
                            $year : "$dateTime"
                        }
                    },
                    commission : {
                        $sum : "$operationData.topUp.commission"
                    }
                }
            }
        ])