MongoDB聚合操作

MongoDB提供了聚合管道(aggregation pipeline)来执行聚合操作。聚合管道是一系列的数据处理阶段,每个阶段都会对输入的数据集进行某种处理,然后输出到下一个阶段。常见的聚合操作包括分组、过滤、排序、投影和计算等。

下面浅谈一下MongoDB的聚合函数。

1、$match:过滤数据,只有符合条件的文档才能进入下一阶段(类似mysql的where)。

用法示例:

db.collection.aggregate([

    { $match: { status: "A" } }

]);

解析:查询status等于A的数据。 

2、$group:将集合中的文档分组,并可以进行求和、平均值等统计操作(类似mysql的group by)。

用法示例:

db.collection.aggregate([
      { $group: { _id: "$by_user", num_tutorial: { $sum: 1 } } }
]);

 解析:根据_id分组统计num_tutorial的数量。 

3、$sort:将输入文档排序后输出(类似mysql的order by age DESC)。

用法示例:

db.collection.aggregate([
  { $sort: { age: -1 } }
]);

解析:根据age进行倒序。

4、$limit: 限制管道的输出数量(类似mysql的limit)。

用法示例:

db.collection.aggregate([
  { $limit: 5 }
]);

解析:查询限制返回五条数据。

5、$skip: 跳过管道中的指定数量的文档(类似mysql的offset)。

用法示例:

db.collection.aggregate([
  { $skip: 5 }
]);

解析:指定跳过五条数据。

6、$unwind: 将数组类型的字段拆分成多个文档(mysql没有)。

用法示例:

db.collection.aggregate([
  { $unwind: "$tags" }
]);

解析:将对象数组tags拆分为多个对象或者将数组拆分为多个元素。

7、$project: 修改输入文档的结构,如重命名、增加或删除字段。

用法示例:

db.collection.aggregate([
  { $project: { _id: 0, name: 1, status: 1 } }
]);

解析:0代表结果集不返回该字段,1代表结果集返回该字段,重命名示例:username:"$name",表示将name字段重命名为username。

8、$lookup: 类似于数据库的左连接操作,用于合并两个集合。(相当于mysql的left join)

用法示例:

db.collection.aggregate([
  {
    $lookup:
      {
        from: "orders",
        localField: "item_id",
        foreignField: "_id",
        as: "order_detail"
      }
  }
]);

解析:左连接orders,连接本表字段为item_id,连接表字段为_id,as为别名。

9、$count: 计数。(相当于mysql的count(*))

用法示例:

db.collection.aggregate([
  { $count: "total" }
]);

解析:统计字段total的总量。

10、$addFields: 添加新字段到文档中,该字段可以是静态值或者通过表达式计算得出。

用法示例:

db.collection.aggregate([
  { $addFields: { totalLower: { $toLower: "$title" } } }
]);

解析:添加一个字段到文档中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值