gpt4 book ai didi

Mongodb 不同的计数,按多列分组的求和函数

转载 作者:可可西里 更新时间:2023-11-01 10:43:46 26 4
gpt4 key购买 nike

我有一个交易表,其中填充了员工休假。我需要有关 mongodb 中以下 sql 场景的帮助。

从中选择员工、月、年、计数(不同的(假期类型)、总和(小时)按员工、月、年分组交易

几周前我开始使用 mongodb。我通过堆栈溢出帖子得到了部分答案 Mongodb count distinct with multiple group fields现在我想添加求和功能。

任何指导都会非常有帮助,这里是一个以表格形式显示的数据示例:

Employee    date      holiday_type  hours
1 1/1/2014 1 8
1 1/5/2014 2 7
1 2/15/2014 1 8
1 3/15/2014 3 16
11 1/1/2014 1 8
11 1/5/2014 1 6
11 2/15/2014 3 8
11 3/15/2014 3 8

最佳答案

因此,“小时”实际上是文档中的一个字段(属性)。因此,根据之前的答案,您只需将双重分组抽象如下:

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

所以你只是在使用 $sum在两个阶段。

此外,您应该值得一看 SQL to Aggregation mapping chart官方文档中提供。它有许多常见的 SQL 操作示例以及如何以 MongoDB 方式实现它们。


来自你自己的数据,但由我自己以这种方式插入:

db.transactions.insert([
{ "employee": 1, "date": new Date("2014-01-01"), "holiday_type": 1, "hours": 8 },
{ "employee": 1, "date": new Date("2014-01-05"), "holiday_type": 2, "hours": 7 },
{ "employee": 1, "date": new Date("2014-02-15"), "holiday_type": 1, "hours": 8 },
{ "employee": 1, "date": new Date("2014-03-15"), "holiday_type": 3, "hours": 16 },
{ "employee": 11, "date": new Date("2014-01-01"), "holiday_type": 1, "hours": 8 },
{ "employee": 11, "date": new Date("2014-01-05"), "holiday_type": 1, "hours": 6 },
{ "employee": 11, "date": new Date("2014-02-15"), "holiday_type": 1, "hours": 8 },
{ "employee": 11, "date": new Date("2014-03-15"), "holiday_type": 3, "hours": 8 }
])

这不是最好的例子,因为所有月份实际上都不同,但如果需要以这种方式分组,这将在“holiday_type”上获得“不同”的值。结果实现:

{
"_id" : {
"employee" : 1,
"Month" : 2,
"Year" : 2014
},
"count" : 1,
"hours" : 8
}
{
"_id" : {
"employee" : 11,
"Month" : 2,
"Year" : 2014
},
"count" : 1,
"hours" : 8
}
{
"_id" : {
"employee" : 1,
"Month" : 1,
"Year" : 2014
},
"count" : 2,
"hours" : 15
}
{
"_id" : {
"employee" : 11,
"Month" : 1,
"Year" : 2014
},
"count" : 1,
"hours" : 14
}
{
"_id" : {
"employee" : 1,
"Month" : 3,
"Year" : 2014
},
"count" : 1,
"hours" : 16
}
{
"_id" : {
"employee" : 11,
"Month" : 3,
"Year" : 2014
},
"count" : 1,
"hours" : 8
}

关于Mongodb 不同的计数,按多列分组的求和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23652591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com