Mongodb计数与多个组字段不同

时间:2014-05-14 09:04:24

标签: mongodb aggregation-framework

我有一个交易表,由员工带来的假期填充。 我需要帮助在mongodb中跟踪sql场景。

select employee,month,year,count(distinct (holiday_type) from 
transactions group by employee,month,year

我需要在mongodb中使用聚合,并且像这样创建了mongo查询,这给了我错误的解决方案

db.transactions.aggregate([
    { "$group": { 
        "_id": { 
            "Month": { "$month" : "$date" }, 
            "Year": { "$year" : "$date" },
            "employee" : "$employee",
            "holiday_type" : "$holiday_type"
        },
        "Count_of_Transactions" : { "$sum" : 1 }
     }}
 ]);

我很困惑在mongodb中使用count distinct逻辑。任何建议都会有所帮助

1 个答案:

答案 0 :(得分:9)

那里的一部分,但你需要得到" distinct" " holiday_type"的值首先,再次$group

db.transactions.aggregate([
    { "$group": { 
        "_id": { 
            "employee" : "$employee",
            "Month": { "$month" : "$date" }, 
            "Year": { "$year" : "$date" },
            "holiday_type" : "$holiday_type"
        },
     }},
     { "$group": {
         "_id": {
            "employee" : "$_id.employee",
            "Month": "$_id.Month",
            "Year": "$_id.Year"
         },
         "count": { "$sum": 1 }
     }}
 ], { "allowDiskUse": true }
 );

这是一般过程" distinct"在SQL中,它本身就是一种分组操作。所以这是一个双$group操作,以获得正确的结果。