推荐答案
在 MongoDB 聚合框架中,常用的管道操作符包括:
- $match:过滤文档,只传递符合条件的文档到下一个管道阶段。
- $group:按指定表达式对文档进行分组,并计算聚合结果。
- $sort:对输入文档进行排序。
- $project:选择文档中的特定字段,或重命名字段,或计算新字段。
- $limit:限制传递到下一个阶段的文档数量。
- $skip:跳过指定数量的文档,传递剩余的文档到下一个阶段。
- $unwind:将数组字段拆分为多个文档,每个文档包含数组中的一个元素。
- $lookup:执行左外连接,从另一个集合中获取相关文档。
- $addFields:向文档中添加新字段,类似于 $project,但不删除现有字段。
- $count:返回当前管道中的文档数量。
本题详细解读
$match
$match
用于过滤文档,类似于 SQL 中的 WHERE
子句。它接受一个查询条件,只有符合条件的文档才会进入下一个管道阶段。
{ $match: { status: "A" } }
$group
$group
用于按指定表达式对文档进行分组,并计算聚合结果。常见的聚合操作包括 $sum
、$avg
、$min
、$max
等。
{ $group: { _id: "$category", total: { $sum: "$quantity" } } }
$sort
$sort
用于对输入文档进行排序。可以指定一个或多个字段进行升序或降序排序。
{ $sort: { age: 1, name: -1 } }
$project
$project
用于选择文档中的特定字段,或重命名字段,或计算新字段。类似于 SQL 中的 SELECT
语句。
{ $project: { name: 1, age: 1, fullName: { $concat: ["$firstName", " ", "$lastName"] } } }
$limit
$limit
用于限制传递到下一个阶段的文档数量。
{ $limit: 5 }
$skip
$skip
用于跳过指定数量的文档,传递剩余的文档到下一个阶段。
{ $skip: 10 }
$unwind
$unwind
用于将数组字段拆分为多个文档,每个文档包含数组中的一个元素。
{ $unwind: "$tags" }
$lookup
$lookup
用于执行左外连接,从另一个集合中获取相关文档。
{ $lookup: { from: "orders", localField: "customerId", foreignField: "_id", as: "orders" } }
$addFields
$addFields
用于向文档中添加新字段,类似于 $project
,但不删除现有字段。
{ $addFields: { total: { $sum: "$scores" } } }
$count
$count
用于返回当前管道中的文档数量。
{ $count: "totalDocuments" }