博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb pipeline 简单说明
阅读量:6389 次
发布时间:2019-06-23

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

基本说明

作用

对mongodb的collection进行运算,筛选,截取,排序操作

语法

db.collection.aggregate(pipeline)

pipeline是要执行的聚合说明

pipeline 格式

dict类型或包含多个dict的列表:{}[{},…,{}],mongodb会顺序执行列表里面的操作

pipeline 语法:{$操作符:{操作}}
mongodb提供了非常多的操作符,这里只选取常用的几个进行说明

常用操作

$project

重命名及增加,删除字段

例子:

db.collection.aggregate({'$project': {    key1:1, // 保留key1字段    key2:0, //不要key2字段(常用以去掉'_id',因为'_id'会默认被包含)    keyalias:'$key3'//将key3字段重命名为keyalias    }}

$match

过滤筛选操作

match语法和db.collection.find()语法相同

$limit

现在数据条数

如: db.collection.aggregate({$limit:5}) : 只返回最多5条数据

$skip

从数据集合开始跳过n条数据

语法和$limit 一样,n为正整数

$unwind

将数组元素拆分成独立字段

语法{$unwind:'$字段名'},该字段的值必需是数组

例子:

假设collection 原版的数据是:

{_id:xxxxxxx, key1: [    {subk1: value,     subk2: value    },    {subk3: value,     subk2: value    }], key2: value, key3: value}

通过db.collection.aggregate({$unwind:'$key1'})后:

{result:[    {        _id: xxxxxxx,        key1: {subk1: value, subk2: value},        key2: value,        key3:value    },    {        _id: xxxxxxx        key1: {subk3: value, subk2: value},        key3: value    }    ] }

$group

根据指定字段值进行分组,可以包含算数类型的表达式操作符

例子:

假设collection数据为

[{    _id: xxxxxxx,    key1: v1,    key2: 2, }, {    _id: xxxxxxxx,    key1: v2,    key2: 5 }, {    _id: xxxxxxx,    key1: v1,    key2: 7 },]db.collection.aggregate({$group:{_id:'$key1', key2sum:{$sum :'$key2'}}})

结果为:

{result:[    {key1: v1, key2sum: 9},    {key1: v2, key2sum: 5} ]}

$sort

对结果进行排序**,语法和db.collection.find().sort()语法一致

{$sort:{key1: -1, key2:1}}: key1值降序,key2值升序

常用操作示例

取某一段范围

pipeline = {$match:{ts:{$gte: 100000, $lt:120000}}}

筛选出ts在[100000, 120000] 之间的数据

去掉值为null的数据

pipeline = {$match:{key1:'$ne':null}}

去掉key1为null的数据

多个操作组合示例

pipeline = [{'$project':{'minu': 1, '_id': 0, 't': 1, 'r': 1}},    {'$unwind': '$minu'},    {'$match': {'minu': {'$ne': None}}},    {'$project': {'r': 1, 'trans_count': '$minu.k', 'ts': {'$add': ['$t', '$minu.t']}}},    {'$match': {'ts': {'$gte': 1457059140, '$lt': 1457060040}}},    {'$project': {'trans_count': 1, 'id': 0, 'r': 1}},    {'$group': {'trans_count': {'$sum': '$trans_count'}, 'id': '$r'}},    {'$project': {'trans_count': 1, 'id': 0, 'ret_code': '$id'}},    {'$sort': {'trans_count': -1, 'ret_code': 1}}]

mongodb会顺序执行以下内容:

  1. 获取minu, t, r 字段的内容, 去掉_id字段

  2. 分解minu的数据

  3. 去掉minu字段为null的数据

  4. 将保留r字段, minu.k重命名为trans_count, ts为t和minu.t的和

  5. 获取ts在[1457059140, 1457060040]之间的数据

  6. 获取trans_count, r 字段

  7. 按照r字段的值分组,同一个r值得trans_count相加(id的值是r字段的内容)

  8. 保留trans_count字段,_id重命名为ret_code

  9. 根据trans_count降序,ret_code升序排列

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

你可能感兴趣的文章
如果点击项目生成时,报错如:不能编辑或者访问拒绝。
查看>>
Selenium学习(一)---Selenium IDE安装及简单介绍
查看>>
PHP控制反转(IOC)和依赖注入(DI)
查看>>
学习计划
查看>>
获取鼠标和元素的坐标点
查看>>
PXE 部署不同版本的系统安装环境以及挽救环境
查看>>
Linux 计划任务
查看>>
flask的orm操作
查看>>
如何防止驱动被恶意利用
查看>>
Nagios的搭建
查看>>
我的友情链接
查看>>
Oracle SQL之--多表查询基础用法
查看>>
图形化插件对Eclipse的版本要求
查看>>
两个关于数列的Python脚本(斐波那契数列和猴子吃香蕉类问题)
查看>>
olabuy-时光从来素默,内心应保持一份素淡与简静
查看>>
Spring Batch Bean 校验 API 支持
查看>>
kux文件怎么打开 苹果手机如何观看kux视频
查看>>
Python中的urllib.request模块
查看>>
第九课 《说人话》
查看>>
js对象数组排序
查看>>