博客
关于我
MongoDB 聚合
阅读量:799 次
发布时间:2023-02-09

本文共 3449 字,大约阅读时间需要 11 分钟。

MongoDB 聚合操作指南

MongoDB 聚合概述

MongoDB 的聚合功能是一种强大的工具,主要用于对集合中的数据进行统计、分析和转换操作。类似于 SQL 中的 count(*),MongoDB 的聚合操作可以帮助我们快速获取聚合后的数据结果。

aggregate() 方法

MongoDB 的聚合操作主要通过 aggregate() 方法来执行。以下是该方法的基本使用格式:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

实例说明

以下是一个典型的聚合操作示例,假设我们有一个名为 mycol 的集合,其内容如下:

{    _id: ObjectId(7df78ad8902c),    title: 'MongoDB Overview',    description: 'MongoDB is no sql database',    by_user: 'runoob.com',    url: 'http://www.runoob.com',    tags: ['mongodb', 'database', 'NoSQL'],    likes: 100},{    _id: ObjectId(7df78ad8902d),    title: 'NoSQL Overview',    description: 'No sql database is very fast',    by_user: 'runoob.com',    url: 'http://www.runoob.com',    tags: ['mongodb', 'database', 'NoSQL'],    likes: 10},{    _id: ObjectId(7df78ad8902e),    title: 'Neo4j Overview',    description: 'Neo4j is no sql database',    by_user: 'Neo4j',    url: 'http://www.neo4j.com',    tags: ['neo4j', 'database', 'NoSQL'],    likes: 750}

通过以下聚合操作,可以计算每个作者撰写的文章数量:

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

运行上述聚合操作后,会返回以下结果:

{    "result": [        {            "_id": "runoob.com",            "num_tutorial": 2        },        {            "_id": "Neo4j",            "num_tutorial": 1        }    ],    "ok": 1}

这与 SQL 中的 select by_user, count(*) from mycol group by by_user 类似。

常用聚合表达式

以下是 MongoDB 聚合操作中常用的表达式:

表达式 描述 示例
$sum 计算总和 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 获取最小值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 获取最大值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 插入值到数组中 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在数组中插入唯一值 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 获取排序后的第一个值 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 获取排序后的最后一个值 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道操作符

MongoDB 的聚合操作支持多个管道操作符,可用于数据处理和转换。以下是一些常用的管道操作符:

操作符 描述 示例
$project 修改文档结构 db.article.aggregate({$project: {title: 1, author: 1}})
$match 过滤数据 db.articles.aggregate([{$match: {score: {$gt: 70, $lte: 90}}}, {$group: {count: $sum: 1}}])
$limit 限制返回数量 db.article.aggregate({$limit: 5})
$skip 跳过指定数量文档 db.article.aggregate({$skip: 5})
$unwind 拆分数组字段 db.article.aggregate({$unwind: "$tags"})
$group 分组聚合 db.mycol.aggregate({$group: {_id: "$by_user", num_tutorial: $sum: 1}})
$sort 排序数据 db.mycol.aggregate({$sort: {likes: -1}})
$geoNear 地理位置聚合 db.mycol.aggregate({$geoNear: {type: "point", location: "$location", maxDistance: 1000}})

管道操作符实例

1. $project 实例

通过 $project 操作符,可以重命名或修改字段名:

db.article.aggregate({    $project: {        _id: 0,        title: 1,        author: 1    }})

2. $match 实例

通过 $match 过滤数据:

db.articles.aggregate([    {        $match: {            score: {                $gt: 70,                $lte: 90            }        }    },    {        $group: {            _id: null,            count: {                $sum: 1            }        }    }])

3. $skip 实例

跳过指定数量文档:

db.article.aggregate({    $skip: 5})

总结

MongoDB 的聚合功能为开发者提供了强大的数据处理能力,通过合理组合不同的聚合操作和管道操作符,可以实现复杂的数据分析任务。理解和掌握这些操作是 MongoDB 编程中的核心技能。

转载地址:http://wjffk.baihongyu.com/

你可能感兴趣的文章
mongoDB 索引
查看>>
mongodb 默认端口号_MongoDB的简单使用
查看>>
MongoDB与Mysql常用命令解释
查看>>
MongoDB两地三中心集群架构设计、全球多写集群架构设计
查看>>
mongodb中比较级查询条件:($lt $lte $gt $gte)(大于、小于)、查找条件
查看>>
Mongodb中的聚合函数使用:按月统计数量
查看>>
Mongodb主从配置
查看>>
Mongodb事务:基于spring+springmvc
查看>>
mongodb使用总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
MongoDB创建用户
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB动态条件之分页查询
查看>>
MongoDB可视化客户端管理工具之NoSQLbooster4mongo
查看>>
MongoDB在Windows2003上得安装配置及使用
查看>>
MongoDb在Windows上的下载安装以及可视化工具的下载与使用
查看>>
MWC折腾之旅Ⅰ
查看>>
MongoDB基础介绍安装与使用
查看>>
MongoDB如何添加多数据源
查看>>
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>