首页 > 数据库 >mongodb--聚合操作

mongodb--聚合操作

时间:2023-04-16 18:45:10浏览次数:25  
标签:聚合 -- mongodb db 管道 文档 aggregate id

一、简单介绍

mongodb的聚合操作分为管道操作和MapReduce操作等。

  • 聚合管道操作:将文档在一个管道处理完毕后,把处理的结果传递给下一个管道进行再次处理
  • MapReduce操作:是将集合中的批量文档进行分解处理,然后将处理后的各个结果进行合并输出

 

二、聚合管道操作

1、语法结构:

piplines = [pipe1,pipe2,...]
db.COLLECTION_NAME.aggregate([pipelines],options)

参数说明:

  • pipelines:每一个pip都是一个管道操作
  • options:可选项

2、常见的管道操作符

常见管道操作符   说明
  $group   将集合中的文档进行分组,便于后续统计结果
  $limit   用于限制MongoDB聚合管道返回的文档数
  $match   用于过滤数据,只输出符合条件的文档
  $sort   将输入的文档先进行排序,再输出
  $project

  用于修改输入文档的结构(增加、删除字段等)和名称,控制字段显示规则,0不显示/1显示

  $skip

  在聚合管道中跳过指定数量的文档,并返回剩余文档

 

3、语法结构

-- $group 操作符
db.COLLECTION_NAME.aggregate( [ { $group:{<key1>:"$<key2>"} } ] )
-- <key1>:别名;<key2>:以key2字段分组group

-- slimit 操作符
db.COLLECTION_NAME.aggregate( { $limit:整型数字 } )

-- Smatch 操作符
db.COLLECTION NAME.aggregate( [ { $match:{<key>:<value>} } ] )
-- <key> 字段名;<value> 字段值

-- $sort 操作符,-1表示降序,1 表示升序
db.COLLECTION NAME.aggregate( [ { $sort:{<key>:-1或1} } ] )

-- $project 操作符
db.COLLECTION NAMB.aggregate( [ { $project:{<key>:<value>} ] } ] )

-- $skip操作符
db.COLLECTION_NAME.aggregate( { $skip:整型数字 } )

4、举例说明

db.comment.aggregate([{$group:{_id:"$userid"}}])
db.comment.aggregate({$limit:3})
db.comment.aggregate([{$match:{nickname:"罗密欧"}}])
db.comment.aggregate([{$sort:{age:-1}}])
db.comment.aggregate([{$project:{_id:0}}])
db.comment.aggregate({$skip:4})

5、管道表达式

  管道阶段操作器的值被称为管道表达式,并且每个管道表达式都是一个文档结构,由字段名称、字段值、和管道表达式组成

  1)常见的管道表达式

常见管道表达式 说明
  $sum   计算总和
  $avg   计算平均值
  $min   获取集合中所有文档对应值的最小值
  $max   获取集合中所有文档对应值的最大值
  $push   在结果文档中插入值到一个数组中
  $first   获取分组文档中的第一个文档
  $last   获取分组文档中的最后一个文档

 

  2)语法结构

-- sum表达式
db.COLLECTION_NAME.aggregate([{
    管道操作符: {
        < key1 > : "$<key2>",
        < key3 > : {
            $sum: $ < key4 > 
        }
    }
}])
-- key1 管道操作字段完结果的别名
-- key2 字段名
-- key3 管道表达式结果的别名
-- key4 进行管道表达式操作的字段

   3)举例说明

-- 数据
db.product.insertMany([
{_id:"1",name:"iPhone 8",price:3000,type:"电子通讯"},
{_id:"2",name:"adidas neo",price:700,type:"服装"},
{_id:"3",name:"nike air max 90",price:760,type:"服装"},
{_id:"4",name:"HuaWei mate30",price:5000,type:"电子通讯"},
{_id:"5",name:"vivo x27",price:2000,type:"电子通讯"},
])

-- 以type字段分组,将pice字段求和输出
db.product.aggregate([{
    $group: {
        "_id": "$type",
        "price": {
            $sum: "$price"
        }
    }
}])

-- 以price字段过滤大于700的数值,然后传到下一个管道,
-- 以type字段分组,把找到的第一个文档的name字段显示,用product别名表示
db.product.aggregate([{
    $match: {
        price: {
            $gt: 700
        }
    }
}, {
    $group: {
        _id: "$type",
        product: {
            $first: "$name"
        }
    }
}])

 

三、MapReduce操作

---

---

标签:聚合,--,mongodb,db,管道,文档,aggregate,id
From: https://www.cnblogs.com/hyy-0/p/17321921.html

相关文章

  • EVPN概述
         ......
  • Atcoder题解:Agc004_e
    \[吓死我了,还以为写了半天的被自己删掉了\]\[但是\text{Ctrl+S}会保存草稿啊\]\[以后一定要保留这个好习惯\]第一步转化题意,我们把“所有机器人移动”转化成“出口带着边框移动”,而在出口运动过程中超出边框的机器人,就“死”了。然后我们发现,出口运动过程中,假设出口目前走到......
  • DAPLink源码生成Keil工程并编译成功——笔记(实践篇)
    本文介绍使用DAP源码生产Keil工程的步骤。一、前期准备工作以下1~4为步骤:1.安装Python3(https://www.python.org/downloads/),并添加至路径PATH,此处忘截图了,总之看见pip、alluser、addtoPATH之类的就勾选。(网上也有些帖子说暂时不支持Python3要用Python2.7的,本人实测Pyt......
  • [oeasy]python0135_python_语义分析_ast_抽象语法树_abstract_syntax_tree
    语义分析_抽象语法树_反汇编回忆上次回顾了一下历史python是如何从无到有的看到Guido长期的坚持和努力python究竟是如何理解print("hello")的?这些ascii字母如何被组织起来执行?纯文本首先编写Guido的简历print("1982------Guidoincwi")print("1995------Guidoincnri")pri......
  • Deep graph clustering with enhanced feature representations for community detec
    论文阅读03-EFR-DGC:EnhancedFeatureRepresentationsforDeepGraphClustering论文信息论文地址:Deepgraphclusteringwithenhancedfeaturerepresentationsforcommunitydetection|SpringerLink论文代码:https://github.com/grcai/DGC-EFR1.存在问题DAEGC在处理......
  • Multi-View Attribute Graph Convolution Networks for Clustering
    论文阅读04-Multi-ViewAttributeGraphConvolutionNetworksforClustering:MAGCN论文信息论文地址:Multi-ViewAttributeGraphConvolutionNetworksforClustering|IJCAI论文代码:MAGCN1.多视图属性聚类:MAGCN1.存在问题:GNN融入Multi-ViewGraph1)他们不能将指定学习......
  • 操作系统试验-进程间通信:借鉴生产者-消费者示例程序,利用FIFO或消息队列实现操作系统中
    实验名称操作系统试验-进程间通信实验目的借鉴生产者-消费者示例程序,利用FIFO或消息队列实现操作系统中的经典生产者-消费者问题,要求:1、仓库有26个存储单元;2、具有两个以上的生产者与消费者;3、生产者和消费者以随机的方式对仓库进行访问;4、在任意时刻,仓库里面只有一个进程;5、仓库满......
  • P3205 [HNOI2010]合唱队
    P3205[HNOI2010]合唱队区间DP——取一端思:根据题意我们发现,每次排队的时候,会出现两种情况当前排入的人(即初始队列最后一人)比初始队列中前一个人矮,排到最左边当前排入的人(同上)比初始队列中前一个人高,排到最右边可从初始队列最后一人切入。设置状态:\(f[l][r][0/1]\)......
  • 索引结构-hash结构
     hash索引特点:1.hash索引只能用于对等比较(=,in),不支持范围查询(between,>,<)2.无法利用索引完成排序操作3.查询效率高,通常只需要一次检索就可以了,效率通常高于B+Tree索引(在不发生hash碰撞的情况下)存储引擎支持:在mysql中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hahs功......
  • 汉源高科1路2路4路导轨式工业级开关量光端机红外对射电子围栏继电器
    汉源高科1路2路4路导轨式工业级开关量光端机红外对射电子围栏继电器......