MongoDB 是一个基于文档的 NoSQL 数据库,它支持丰富的聚合操作来处理和分析数据。聚合操作是通过聚合管道(aggregation pipeline)来实现的,管道中的一系列阶段(stages)会对数据进行各种处理和转换。
以下是一些常用的 MongoDB 聚合操作:
$match
:过滤数据,只输出符合条件的文档。类似于 SQL 中的 WHERE 子句。
{ $match: { age: { $gt: 18 } } }
$project
:选择需要的字段,排除不需要的字段。类似于 SQL 中的 SELECT 子句。
{ $project: { _id: 0, name: 1, age: 1 } }
$group
:根据指定的字段对文档进行分组,并对每个分组执行聚合操作。类似于 SQL 中的 GROUP BY 子句。
{ $group: { _id: "$city", count: { $sum: 1 }, avgAge: { $avg: "$age" } } }
$sort
:对文档进行排序。类似于 SQL 中的 ORDER BY 子句。
{ $sort: { age: -1 } }
$limit
:限制输出文档的数量。类似于 SQL 中的 LIMIT 子句。
{ $limit: 10 }
$skip
:跳过指定数量的文档。类似于 SQL 中的 OFFSET 子句。
{ $skip: 5 }
$unwind
:将数组字段拆分成多个文档。类似于 SQL 中的 UNNEST 操作。
{ $unwind: "$hobbies" }
$lookup
:将另一个集合的文档与当前文档进行连接。类似于 SQL 中的 JOIN 操作。
{ $lookup: { from: "users", localField: "userId", foreignField: "_id", as: "userDetails" } }
$addFields
/$set
:向文档中添加新的字段或更新现有字段的值。类似于 SQL 中的 SET 子句。
{ $addFields: { isAdult: { $gt: ["$age", 18] } } }
$project
:更新文档的字段选择,可以用于重命名、删除或计算字段。
{ $project: { _id: 0, name: 1, age: 1, isAdult: { $eq: ["$age", 18] } } }
这些聚合操作可以组合使用,以实现更复杂的数据处理和分析。在实际应用中,可以根据需求选择合适的聚合操作来满足特定的数据处理需求。