MongoDB 聚合管道中的数据转换和数据操作

2023-04-15 00:00:00 数据 聚合 道中

MongoDB 聚合管道中的数据转换和数据操作,可以使用多种操作符和表达式来实现。以下是一些常用的操作符和表达式示例:

  1. $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 则表示不保留。

  1. $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"
  }
}
  1. $group 操作符:用于对文档进行分组计算。

例如,如果我们想按照国家分组,统计每个国家的用户总数,可以使用 $group 操作符:

db.users.aggregate([
  { $group: { _id: "$address.country", count: { $sum: 1 } } }
])

运行结果为:

{
  "_id": "China",
  "count": 1
}

其中,_id 表示分组依据的字段,$sum 表示求和操作。

  1. $sort 操作符:用于对文档进行排序。

例如,如果我们想按照年龄从小到大排序,可以使用 $sort 操作符:

db.users.aggregate([
  { $sort: { age: 1 } }
])
  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 聚合管道操作符和表达式示例,供参考使用。

相关文章