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
可以将数据集合中的文档按照指定的字段进行分组,并进行聚合计算操作,如求和、平均值等。下面的示例代码演示了如何将学生文档按班级进行分组,并统计每个班级的学生数和平均分数。
-- -------------------- ---- ------- ----------------------- - ------- - ---- --------- ------ - ----- - -- ---------- - ----- -------- - - - ---展开代码
3. $project
$project
用于对文档进行投影或重构,类似于 SQL 中的 SELECT
语句。它可以在查询结果中仅包含需要的字段,并重命名字段名、计算新字段等操作。
-- -------------------- ---- ------- --------------------- - --------- - ----- -- ---- -- ----- --------------- - - ---展开代码
上述代码从 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