MongoDB group_one() 函数的作用与使用方法
作用
MongoDB的group_one()函数是用于集合聚合操作的一个聚合管道阶段。
group_one()函数的作用是将输入的文档按指定的字段值进行分组,返回每个分组的聚合结果。
使用方法
group_one() 函数的使用方法如下:
db.collection.aggregate([
{
$group: {
_id: , // 用于分组的字段或表达式
: { : },
...
: { : }
}
}
])
其中,_id
字段是必须要指定的,用于指定用来分组的字段或表达式。
field1
~ fieldN
是分组后要输出的聚合结果的字段名,accumulator1
~ accumulatorN
是指定对于该字段进行聚合的操作,expression1
~ expressionN
则是指定在执行聚合操作前对该字段进行的表达式操作。
示例
下面提供两个例子来展示 group_one() 函数的使用方法。
假设我们有一个 orders
集合,存储了订单的信息:
{
"_id": ObjectId("5fc9c8715e73d5d7b5ca5b5c"),
"product": "A",
"price": 10,
"quantity": 5,
"created_at": ISODate("2020-12-04T12:00:00Z")
},
{
"_id": ObjectId("5fc9c87e5e73d5d7b5ca5b5d"),
"product": "B",
"price": 5,
"quantity": 3,
"created_at": ISODate("2020-12-04T12:00:00Z")
},
{
"_id": ObjectId("5fc9c8a75e73d5d7b5ca5b5e"),
"product": "A",
"price": 15,
"quantity": 2,
"created_at": ISODate("2020-12-05T12:00:00Z")
},
{
"_id": ObjectId("5fc9c8af5e73d5d7b5ca5b5f"),
"product": "C",
"price": 20,
"quantity": 1,
"created_at": ISODate("2020-12-05T12:00:00Z")
}
示例一:按商品名称分组统计销售总额
db.orders.aggregate([
{
$group: {
_id: "$product",
revenue: { $sum: { $multiply: [ "$price", "$quantity" ] } }
}
}
])
运行结果为:
{ "_id" : "A", "revenue" : 80 }
{ "_id" : "B", "revenue" : 15 }
{ "_id" : "C", "revenue" : 20 }
说明:按照商品名称进行分组,然后通过 revenue
字段输出各组的销售总额。
示例二:按日期分组统计销售总额,只统计12月4日的数据
db.orders.aggregate([
{
$match: {
created_at: {
$gte: ISODate("2020-12-04T00:00:00Z"),
$lt: ISODate("2020-12-05T00:00:00Z")
}
}
},
{
$group: {
_id: null,
revenue: { $sum: { $multiply: [ "$price", "$quantity" ] } }
}
}
])
运行结果为:
{ "_id" : null, "revenue" : 55 }
说明:首先使用 $match
管道操作筛选出日期大于等于 2020-12-04 且小于2020-12-05 的数据,然后使用 $group
管道操作将这些数据进行分组并统计销售总额,同时 _id
字段设置为 null
,表示不按任何字段进行分组,只统计整个集合的销售总额。