推荐答案
在 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" }