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] }
}
}
这些聚合操作可以组合使用,以实现更复杂的数据处理和分析。在实际应用中,可以根据需求选择合适的聚合操作来满足特定的数据处理需求。