MongoDB 聚合管道中的数据转换和数据操作
MongoDB 聚合管道中的数据转换和数据操作,可以使用多种操作符和表达式来实现。以下是一些常用的操作符和表达式示例:
- $project 操作符:用于投影(过滤)文档字段。
例如,假设有以下文档集合:
{ "_id": ObjectId("60a530ed7f05ee15f42859ec"), "name": "Alice", "age": 25, "email": "alice@example.com", "address": { "city": "Beijing", "country": "China" } }
如果我们只想查看其中的 name 和 email 字段,可以使用 $project 操作符:
db.users.aggregate([ { $project: { name: 1, email: 1 } } ])
运行结果为:
{ "_id": ObjectId("60a530ed7f05ee15f42859ec"), "name": "Alice", "email": "alice@example.com" }
其中,1 表示保留该字段,0 则表示不保留。
- $match 操作符:用于筛选符合条件的文档。
例如,如果我们只想查看 age 大于等于 18 的用户信息,可以使用 $match 操作符:
db.users.aggregate([ { $match: { age: { $gte: 18 } } } ])
运行结果为:
{ "_id": ObjectId("60a530ed7f05ee15f42859ec"), "name": "Alice", "age": 25, "email": "alice@example.com", "address": { "city": "Beijing", "country": "China" } }
- $group 操作符:用于对文档进行分组计算。
例如,如果我们想按照国家分组,统计每个国家的用户总数,可以使用 $group 操作符:
db.users.aggregate([ { $group: { _id: "$address.country", count: { $sum: 1 } } } ])
运行结果为:
{ "_id": "China", "count": 1 }
其中,_id 表示分组依据的字段,$sum 表示求和操作。
- $sort 操作符:用于对文档进行排序。
例如,如果我们想按照年龄从小到大排序,可以使用 $sort 操作符:
db.users.aggregate([ { $sort: { age: 1 } } ])
- $addFields 操作符:用于添加新的字段。
例如,如果我们想添加一个新的字段 fullName,表示姓名和邮箱的组合,请使用 $addFields 操作符:
db.users.aggregate([ { $addFields: { fullName: { $concat: [ "$name", " ", "$email" ] } } }, { $project: { fullName: 1 } } ])
运行结果为:
{ "_id": ObjectId("60a530ed7f05ee15f42859ec"), "fullName": "Alice alice@example.com" }
其中,$concat 表示连接字符串。
以上是一些常用的 MongoDB 聚合管道操作符和表达式示例,供参考使用。
相关文章