📅  最后修改于: 2023-12-03 15:03:02.232000             🧑  作者: Mango
MongoDB聚合命令是用于将多个文档数据处理成一个结果的工具。聚合操作可以帮助开发人员根据需求筛选、统计、计算文档,得到需要的结果。
聚合操作通过使用$group,$match,$sort等命令构建pipeline,将数据按照一定的规则处理,最终返回处理后的数据结果。
$match命令用于过滤文档,只返回符合条件的文档。它的语法如下:
$match: {
<query-expression>
}
示例代码:
db.customers.aggregate([
{ $match : { country : "China" } }
])
$group命令用于对文档进行分组,将具有相同值的文档分为一组,然后对每组进行计算。它的语法如下:
$group: {
_id: <expression>,
<field1>: { <accumulator1> : <expression1> },
...
}
其中,_id表示分组依据的字段,
示例代码:
db.sales.aggregate([
{ $group : { _id : "$item", total : { $sum : "$price" } } }
])
$sort命令用于排序文档。它的语法如下:
$sort: {
<field1>: <sort order>,
...
}
其中,
示例代码:
db.sales.aggregate([
{ $sort : { total : -1 } }
])
$limit和$skip命令用于控制返回文档的数量和偏移量。它们的语法如下:
$limit: <number>
$skip: <number>
其中,
示例代码:
db.sales.aggregate([
{ $sort : { total : -1 } },
{ $limit : 10 },
{ $skip : 5 }
])
假设我们有一份用户数据,需要对数据进行聚合操作,得到各个国家的用户数量、平均年龄和平均收入。
{
"_id": 1,
"name": "Tom",
"gender": "male",
"age": 30,
"country": "China",
"salary": 2000
}
{
"_id": 2,
"name": "Lucy",
"gender": "female",
"age": 25,
"country": "USA",
"salary": 2500
}
{
"_id": 3,
"name": "Jerry",
"gender": "male",
"age": 35,
"country": "USA",
"salary": 4000
}
{
"_id": 4,
"name": "Lily",
"gender": "female",
"age": 28,
"country": "China",
"salary": 3000
}
按照国家进行分组,统计各个国家的用户数量、平均年龄和平均收入。
db.users.aggregate([
{ $group : { _id : "$country",
num_users: { $sum: 1 },
avg_age: { $avg: "$age" },
avg_salary: { $avg: "$salary" }
}
}
])
按照用户数量排序。
db.users.aggregate([
{ $group : { _id : "$country",
num_users: { $sum: 1 },
avg_age: { $avg: "$age" },
avg_salary: { $avg: "$salary" }
}
},
{ $sort : { num_users : -1 } }
])
只返回前3条结果。
db.users.aggregate([
{ $group : { _id : "$country",
num_users: { $sum: 1 },
avg_age: { $avg: "$age" },
avg_salary: { $avg: "$salary" }
}
},
{ $sort : { num_users : -1 } },
{ $limit : 3 },
{ $skip : 0 }
])
本文介绍了MongoDB聚合命令的基本使用方法,并提供了一个简单的示例,可以帮助开发人员更好地了解聚合操作的使用。除此之外,还有很多其他聚合命令和使用场景,需要开发人员根据实际需求进行学习和实践。