博客
关于我
MongoDB 聚合
阅读量:795 次
发布时间: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/

你可能感兴趣的文章
Mac下redis安装和启动
查看>>
Mac下如何配置环境变量
查看>>
Mac下忘记MySQL密码可以这样做!
查看>>
Mac下配置多个SSH-Key (gitLab)
查看>>
Mac安装Maven
查看>>
Mac实现远程服务器登录管理
查看>>
mac常用命令
查看>>
mac更新后 homestead 无法使用
查看>>
mac环境安装docker
查看>>
MAC生成公钥私钥、PKCS1 转 PKCS8
查看>>
Mac电脑怎么读写不了移动硬盘?解决苹果电脑不能读写移动硬盘问题
查看>>
Mac电脑生成git的公私钥(拉取代码更便捷)
查看>>
magento1给customer添加自定义属性
查看>>
Magic Leap是快出产品的节奏,已开放内容开发者注册通道
查看>>
Majorization-Minimization (MM) 和 Successive Convex Approximation (SCA)
查看>>
makefile 打印
查看>>
makefile工作笔记0001---认识使用makefile
查看>>
Makefile遗漏分隔符错误解决
查看>>
malloc和定位new表达式
查看>>
MAMP无法正常启动,错误提示The built-in Apache is active
查看>>