문제

I have transaction table which is populated by holidays taken by the employees. I would need help on following sql scenario in mongodb.

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

I need to use aggregation in mongodb and was created mongo query like this and this gives me wrong solution

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

I am confused in using count distinct logic in mongodb. Any suggestion would be helpful

도움이 되었습니까?

해결책

Part of the way there but you need to get the "distinct" values for "holiday_type" first, then you $group again:

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 }
 );

That is the general process as "distinct" in SQL is kind of a grouping operation in itself. So it is a double $group operation in order to get your correct result.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top