MongoDB的聚合操作符有哪些?

MongoDB 提供了丰富的聚合操作符,用于对数据进行复杂的查询、过滤、分组、排序和其他转换操作。以下是一些常用的聚合操作符,按类别进行分类:

1. 管道阶段(Pipeline Stages)

这些操作符用于在聚合管道中创建不同的阶段,每个阶段接收输入并进行处理,然后将结果传递给下一个阶段。

  • $match:筛选文档,只返回满足条件的文档,类似于SQL中的WHERE
  • $project:修改输入文档的结构,主要用于包含、排除字段或添加计算字段。
  • $group:根据指定的字段进行分组,可以执行聚合操作(如计数、求和等)。
  • $sort:对文档进行排序。
  • $limit:限制返回的文档数量。
  • $skip:跳过指定数量的文档。
  • $unwind:将数组类型的字段拆分为多个文档。
  • $lookup:进行左外连接,类似于SQL中的JOIN
  • $out:将聚合结果输出到一个新集合。
  • $addFields:添加新的字段到输出文档中。
  • $replaceRoot:替换输入文档为指定的文档。
  • $count:返回文档总数。
  • $facet:并行执行多条聚合管道,并将结果合并到一个单一的文档中。
  • $bucket:将文档分组到指定范围的桶中。
  • $bucketAuto:根据输入数据的分布自动生成桶。
  • $sortByCount:根据字段值的计数进行排序。

2. 聚合表达式(Aggregation Expressions)

这些操作符用于在管道阶段中执行计算和操作。

数学运算符
  • $add:加法。
  • $subtract:减法。
  • $multiply:乘法。
  • $divide:除法。
  • $mod:取模运算。
字符串操作符
  • $concat:字符串连接。
  • $substr:截取子字符串。
  • $toLower:转换为小写。
  • $toUpper:转换为大写。
  • $strcasecmp:字符串不区分大小写的比较。
数组操作符
  • $arrayElemAt:返回指定位置的数组元素。
  • $concatArrays:连接两个或多个数组。
  • $filter:筛选数组元素。
  • $size:返回数组的长度。
  • $slice:截取数组的一部分。
日期操作符
  • $dateFromString:将字符串转换为日期。
  • $dateToString:将日期转换为字符串。
  • $dayOfMonth:返回日期的天部分。
  • $month:返回日期的月部分。
  • $year:返回日期的年部分。
  • $hour:返回日期的小时部分。
  • $minute:返回日期的分钟部分。
  • $second:返回日期的秒部分。
条件和布尔操作符
  • $cond:条件判断,类似于三元运算符。
  • $ifNull:如果为null,则返回指定值。
  • $and$or$not:逻辑运算符。
类型操作符
  • $type:返回字段的类型。
  • $convert:转换字段的类型。

示例

假设有一个集合orders,其中包含如下文档:

{ "_id": 1, "item": "apple", "quantity": 10, "price": 2.5, "orderDate": ISODate("2023-01-15") }
{ "_id": 2, "item": "banana", "quantity": 5, "price": 1.0, "orderDate": ISODate("2023-02-20") }
{ "_id": 3, "item": "cherry", "quantity": 15, "price": 3.0, "orderDate": ISODate("2023-03-10") }

你可以使用聚合操作符进行复杂查询,例如计算每种商品的总销售额:

db.orders.aggregate([
  {
    $group: {
      _id: "$item",
      totalSales: { $sum: { $multiply: ["$quantity", "$price"] } }
    }
  },
  { $sort: { totalSales: -1 } }
])

这个聚合管道首先按item字段分组,计算每种商品的总销售额,然后按总销售额降序排序。

这些聚合操作符和表达式使MongoDB能够执行复杂的数据操作和分析,满足各种业务需求。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值