MongoDB 是一个开源的文档型 NoSQL 数据库,其中最常用的聚合操作能够完成多种复杂查询,同时还能按需将数据进行分组和统计等操作。本文将介绍 MongoDB 中常用的 7 种聚合语法,并提供详细的示例代码,帮助读者深入理解 MongoDB 的聚合操作。
1. $match
$match 根据指定条件从源数据集合中筛选出符合要求的文档。它类似于 SQL 中的 WHERE 语句,只不过 $match 是作为初始聚合管道阶段所使用的。
db.orders.aggregate([
{
$match: {
status: { $in: ["pending", "completed"] },
date: { $gte: new Date("2021-01-01"), $lt: new Date("2021-12-31") }
}
}
]);上述代码将从订单集合中查询符合以下两个条件的文档:
status字段值为pending或completed。date字段值在 2021 年之间。
2. $group
$group 可以将数据集合中的文档按照指定的字段进行分组,并进行聚合计算操作,如求和、平均值等。下面的示例代码演示了如何将学生文档按班级进行分组,并统计每个班级的学生数和平均分数。
// www.javascriptcn.com code example
db.students.aggregate([
{
$group: {
_id: "$class",
count: { $sum: 1 },
avg_score: { $avg: "$score" }
}
}
]);3. $project
$project 用于对文档进行投影或重构,类似于 SQL 中的 SELECT 语句。它可以在查询结果中仅包含需要的字段,并重命名字段名、计算新字段等操作。
// www.javascriptcn.com code example
db.people.aggregate([
{
$project: {
name: 1,
age: 1,
city: "$address.city"
}
}
]);上述代码从 people 集合中获取所有文档,并仅保留 name、age 和 city 三个字段。其中 city 字段是从 address.city 中获取的。
4. $limit
$limit 用于限制聚合管道输出的文档数。它类似于 SQL 中的 LIMIT 语句。
db.customers.aggregate([
{ $limit: 10 }
]);上述代码表示仅从 customers 集合中获取前 10 个文档。
5. $skip
$skip 用于跳过指定数量的文档后再进行后续的处理。它也可以和 $limit 一起使用,实现分页查询操作。
db.orders.aggregate([
{ $skip: 50 },
{ $limit: 10 }
]);上述代码表示先跳过前 50 个文档,然后获取接下来 10 个文档。
6. $sort
$sort 用于对聚合管道输出的文档进行排序。
db.sales.aggregate([
{ $sort: { revenue: -1 } }
]);上述代码表示将 sales 集合中的文档按 revenue 字段进行降序排序。
7. $unwind
$unwind 将文档中的数组字段拆分成多个文档,类似于 SQL 中的 JOIN 操作。
db.books.aggregate([
{ $unwind: "$authors" },
{ $group: { _id: "$authors", count: { $sum: 1 } } }
]);上述代码表示将 books 集合中的 authors 数组字段拆分成多个文档,并将它们按作者统计作品数量。
结束语
上述 7 种聚合语法是 MongoDB 中常用的操作,掌握它们将大大提高开发效率和查询灵活性。同时,建议读者加强自己的编程实践,不断优化自己的代码,以更好地使用 MongoDB 聚合操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d6415ba941bf7134bf351f