我有一个事务表,它由员工休假填充。我需要在mongodb以下sql场景的帮助。
select employee,month,year,count(distinct (holiday_type) from
transactions group by employee,month,year
我需要在mongodb中使用聚合,并像这样创建mongodb查询,这给了我错误的解决方案
db.transactions.aggregate([
{ "$group": {
"_id": {
"Month": { "$month" : "$date" },
"Year": { "$year" : "$date" },
"employee" : "$employee",
"holiday_type" : "$holiday_type"
},
"Count_of_Transactions" : { "$sum" : 1 }
}}
]);
我在mongodb中使用计数不同的逻辑感到困惑。任何建议都会有帮助的
这是其中的一部分,但是您需要首先获得"holiday_type"的"distinct"值,然后您再次 $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 }
);
这是SQL中"distinct"的一般过程,它本身就是一种分组操作。所以这是一个双 $group
操作,以获得正确的结果。