MongoDB分组查询
在MongoDB中,分组查询是指对集合中的文档根据某个字段进行分组,并进行统计、计算等操作。在实际开发中,分组查询是非常常见的操作,可以用来统计数据、生成报表等。
本文将详细介绍MongoDB中的分组查询操作,包括基本的分组查询、多字段分组查询、分组查询中的条件过滤等内容。
基本的分组查询
首先,我们先创建一个名为users
的集合,用来存储用户信息。每个文档包含name
、age
和gender
字段:
{
"name": "Alice",
"age": 25,
"gender": "female"
}
{
"name": "Bob",
"age": 30,
"gender": "male"
}
{
"name": "Charlie",
"age": 28,
"gender": "male"
}
接下来,我们可以使用MongoDB的$group
操作符进行分组查询。以下是一个简单的示例,按照gender
字段对文档进行分组,并统计每个分组中文档的数量:
db.users.aggregate([
{
group: {
_id: "gender",
count: { $sum: 1 }
}
}
])
上面的代码中,$group
操作符会将文档按照gender
字段进行分组,然后使用$sum
操作符统计每个分组中文档的数量。查询结果如下:
{ "_id" : "female", "count" : 1 }
{ "_id" : "male", "count" : 2 }
多字段分组查询
除了单个字段的分组查询,我们还可以进行多字段的分组查询。假设我们希望按照gender
和age
字段对文档进行分组,并统计每个分组中文档的数量:
db.users.aggregate([
{
group: {
_id: { gender: "gender", age: "age" },
count: {sum: 1 }
}
}
])
查询结果如下:
{ "_id" : { "gender" : "female", "age" : 25 }, "count" : 1 }
{ "_id" : { "gender" : "male", "age" : 28 }, "count" : 1 }
{ "_id" : { "gender" : "male", "age" : 30 }, "count" : 1 }
分组查询中的条件过滤
有时候,我们希望在分组查询中加入条件过滤,只统计满足条件的文档。假设我们希望只统计年龄大于等于30岁的男性用户数量:
db.users.aggregate([
{
match: {
age: {gte: 30 },
gender: "male"
}
},
{
group: {
_id: "gender",
count: { $sum: 1 }
}
}
])
查询结果如下:
{ "_id" : "male", "count" : 1 }
在上面的示例中,我们使用了$match
操作符对文档进行条件过滤,只选择符合条件的文档进行分组查询。
总结
本文介绍了MongoDB中的分组查询操作,包括基本的分组查询、多字段分组查询和分组查询中的条件过滤。分组查询在实际开发中非常有用,可以帮助我们统计数据、生成报表等。