MongoDB【四】查询与聚合框架

在MongoDB中,查询数据主要包括基础查询以及使用聚合框架(Aggregation Framework)进行复杂数据处理。

基础查询操作

1. find() 查询

  • db.collection.find(query, projection) 是最基本的查询方法,其中:
    • query 是一个JSON形式的对象,定义了要匹配的文档条件。
    • projection 可选,用于指定返回文档中包含哪些字段,可以用来做字段筛选和投影操作。

示例:

db.users.find({ age: { $gt: 18 } }); // 查询年龄大于18的所有用户
db.users.find({ gender: 'male' }, { name: 1, email: 1 }); // 查询性别为男性的用户,并仅返回姓名和邮箱字段

2. 查询条件

  • 使用各种查询操作符如 $gt, $gte, $lt, $lte, $ne, $in, $nin, $exists, $regex 等来进行特定条件的匹配。

3. 排序(Sort)

  • 使用 sort() 方法对查询结果进行排序,例如:
db.users.find().sort({ age: 1, name: -1 }); // 按照年龄升序、姓名降序排列结果

4. 限制查询结果的数量(Limit & Skip)

  • limit() 方法用于限制返回的结果数量,而 skip() 方法则是跳过指定数量的文档再返回结果。
db.users.find().sort({ registrationDate: -1 }).limit(10); // 获取最新注册的前10个用户
db.users.find().skip(50).limit(10); // 跳过前50个文档,然后获取接下来的10个文档

聚合框架(Aggregation Pipeline)

MongoDB的聚合框架允许用户执行多个阶段的处理,将数据从原始集合转换成单一输出结果。每个阶段都会处理文档流,并将其传递给下一个阶段。

  • 常见操作符
    • $match: 类似于 find() 的查询过滤阶段。
    • $project: 改变输入文档的结构或内容,类似于 find() 的投影阶段。
    • $group: 将文档按某个字段分组,并计算每个组的统计值,如总和、平均值等。
    • $sort: 对中间结果进行排序。
    • $skip$limit: 在聚合管道中也可以使用来控制输出文档的数量和起始位置。
    • $unwind: 将数组类型的字段拆分成多条文档。
    • $lookup: 进行类似JOIN的操作,从其他集合中加入相关文档。
    • $merge: 合并聚合结果到另一个集合。
    • 更多操作符如 $addFields, $bucket, $bucketAuto, $count, $facet, $replaceRoot, $sample 等,提供丰富的数据处理能力。

聚合操作示例:

db.orders.aggregate([
   { $match: { status: "completed" } },
   { $group: { _id: "$customer_id", totalSpent: { $sum: "$amount" } } },
   { $sort: { totalSpent: -1 } },
   { $limit: 10 }
]);

这个聚合操作会找到所有已完成状态的订单,按客户ID分组计算每位客户的总消费额,并返回消费额最高的前10名客户。

相关推荐

  1. MongoDB查询聚合框架

    2024-04-21 01:08:02       33 阅读
  2. mongodb进阶聚合查询各种写法

    2024-04-21 01:08:02       41 阅读
  3. MongoDB 聚合查询在数据统计中的应用

    2024-04-21 01:08:02       50 阅读
  4. FastAPI+React全栈开发10 MongoDB聚合查询

    2024-04-21 01:08:02       33 阅读
  5. MongoDB聚合管道:$match

    2024-04-21 01:08:02       50 阅读
  6. MongoDB聚合:$out

    2024-04-21 01:08:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 01:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 01:08:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 01:08:02       82 阅读
  4. Python语言-面向对象

    2024-04-21 01:08:02       91 阅读

热门阅读

  1. vite与webpack有什么不同?为什么vite比webpack快?

    2024-04-21 01:08:02       39 阅读
  2. Webpack打包

    2024-04-21 01:08:02       34 阅读
  3. Leetcode5--最长回文子串(双指针中心扩散法)

    2024-04-21 01:08:02       31 阅读
  4. 单片机小项目——直流电机+按键

    2024-04-21 01:08:02       33 阅读
  5. go 基本知识点备忘

    2024-04-21 01:08:02       37 阅读
  6. JVM调优

    2024-04-21 01:08:02       31 阅读
  7. MYSQL之事务

    2024-04-21 01:08:02       33 阅读
  8. python文件无法作为模块被导入

    2024-04-21 01:08:02       30 阅读
  9. 【Cookie,Session,Token,JWT的区别】

    2024-04-21 01:08:02       35 阅读
  10. Android 单一音量控制

    2024-04-21 01:08:02       35 阅读