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 聚合管道操作符和表达式示例,供参考使用。
相关文章