Scrapy框架之MongoDB聚合操作

news2024/11/15 10:23:38

目录

MongoDB聚合操作

聚合操作的基本语法

 常用的聚合操作

管道命令之$group 

按照某个字段进行分组

详解 

计算集合中某个字段的平均值 

常用表达式

管道命令之$match 

示例 

管道命令之$sort

管道命令之$skip 和 $limit 

管道命令之$project


MongoDB聚合操作

在MongoDB中,聚合操作是对文档进行数据处理和转换的强大工具。它允许你通过多个阶段的管道将多个操作链接在一起,以便对文档进行复杂的数据处理,主要用于处理多个文档(诸如统计平均值,求和等),并返回计算后的数据结果。

  • 对多个文档进行分组
  • 对分组的文档执行操作并返回单个结果
  • 分析数据变化

聚合操作的基本语法

db.collection.aggregate([pipeline])

db.collection是要进行聚合操作的集合,pipeline是一个由多个聚合阶段组成的数组。每个聚合阶段都代表一个数据处理操作,按照在数组中的顺序依次执行。

 常用的聚合操作

  1. $match:过滤文档,只输出符合指定条件的文档。
  2. $project:选择需要输出的字段,并可以进行计算、重命名等操作。
  3. $group:将文档分组,并可以对分组进行聚合计算。
  4. $sort:对文档进行排序。
  5. $limit:限制输出结果的数量。
  6. $skip:跳过指定数量的文档。
  7. $unwind:展开数组字段,将每个数组元素拆分成独立的文档。
  8. $lookup:在不同的集合之间执行类似关联操作。

管道命令之$group 

按照某个字段进行分组

db.stu.aggregate(
   {$group:
     {
      _id:"$country",
      counter:{$sum:1}
     }
   }
)

详解 

  • db.db_name.aggregate是语法,所有的管道命令都需要写在其中
  • _id 表示分组的依据,按照哪个字段进行分组,例如:需要使用$gender表示选择这个字段进行分组
  • $sum:1 表示把每条数据作为1进行统计,统计的是该分组下面数据的条数

计算集合中某个字段的平均值 

db.sales.aggregate([
  {
    $group: {
      _id: null,
      avgAmount: { $avg: "$amount" }
    }
  }
])

$group阶段按照null分组(即所有文档都属于同一组),然后使用$avg操作符计算amount字段的平均值,并将结果输出为avgAmount字段。 

常用表达式

表达式:处理输⼊⽂档并输出 语法:表达式:'$列名' 常⽤表达式: 

  • $sum: 计算总和, $sum:1 表示以⼀倍计数
  • $avg: 计算平均值
  • $min: 获取最⼩值
  • $max: 获取最⼤值
  • $push: 在结果⽂档中插⼊值到⼀个数组中

管道命令之$match 

$match用于进行数据的过滤,是在能够在聚合操作中使用的命令,和find区别在于$match 操作可以把结果交给下一个管道处理,而find不行。

示例 

查询年龄大于20的人

db.person.aggregate([
   {$match:{age:{$gt:20}}}
   ])

查询年龄大于20的魏国的人数

db.person.aggregate([
   {$match:{age:{$gt:20}}},
   {$group:{_id:"$country",counter:{$sum:1}}}
   ])

管道命令之$sort

$sort用于将输入的文档排序后输出

使用示例如下:

  1. 查询人物,按照年龄升序

    db.person.aggregate([{$sort:{age:1}}])
  2. 查询每个国家的人数,并排序

    db.person.aggregate([
       {$group:{_id:"$country",counter:{$sum:1}}},
       {$sort:{counter:-1}}
    ])
    

管道命令之$skip 和 $limit 

  • $limit限制返回数据的条数
  • $skip 跳过指定的文档数,并返回剩下的文档数

注意

同时使用时先使用skip在使用limit

使用示例如下:

  1. 查询2条信息

    db.person.aggregate([
       {$limit:2}
    ])
    
  2. 查询从第三条开始的信息

    db.person.aggregate([
       {$skip:3}
    ])
    
  3. 查询每个国家的人数,按照人数升序,返回第二条数据

    db.person.aggregate([
       {$group:{_id:"$country",counter:{$sum:1}}},
       {$sort:{counter:-1}},
       {$skip:1},
       {$limit:1}
    ])
    

管道命令之$project

$project用于修改文档的输入输出结构

字段值:0不显示,1显示

使用示例如下:

  1. 查询人物的姓名、年龄,不显示ID

db.person.aggregate([
   {$project:{_id:0,name:1,age:1}}
   ])
  1. 查询每个国家的人数,只显示数量

db.person.aggregate([
   {$group:{_id:"$country",counter:{$sum:1}}},
   {$project:{_id:0,counter:1}}
   ])

注意

  • _id与其他字段共同设置时,0只能设置在_id
  • 设置字段时,除了_id字段,其他默认取反

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ts:Set、Map

观看小满老师课程的随笔~ 前言 与 原生 js 中的原理和方法是相同的,这里只是用了 ts 中的 强类型 一、Set 天然去重,引用类型除外增删改查:add、has、delete、clear循环:forEach、entries、keys、for...of(内置的有iterator迭代…

CCF-CSP真题《202305-2 矩阵运算》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202305-2试题名称:矩阵运算时间限制:5.0s内存限制:512.0MB问题描述: 题目背景 Softmax(QKTd)V 是 Transformer 中注意力模块的…

javac命令编译.java源文件报错“编码GBK的不可映射字符“

原因在于.java源文件编码方式是UTF-8 二cmd DOS窗口编码格式是GBK 解决办法 javac -encoding UTF-8 *.java

Kettle 实现动态表查询

文章目录 前言动态表名查询数据 :一、获取表名1、新建一个转换getTableName,拖入获取系统信息,字段选择,设置变量2、打开 获取系统信息 编辑界面,填写名称,点击类型选择要获取的信息类型3、打开字段选择,选…

深蓝学院C++基础与深度解析笔记 第 9 章 序列与关联容器

第 9 章 序列与关联容器 1. 容器概述 A、容器: 一种特殊的类型,其对象可以放置其它类型的对象(元素) – 需要支持的操作:对象的添加、删除、索引、遍历 – 有多种算法可以实现容器,每种方法各有利弊B、容…

nvdiffrecmc在Windows上的配置及使用

nvdiffrecmc是NVIDIA研究院开源的项目,源代码地址:https://github.com/NVlabs/nvdiffrecmc,论文为《Shape, Light, and Material Decomposition from Images using Monte Carlo Rendering and Denoising》,使用Monte Carlo渲染和去…

为什么有些Buck-Boost芯片没有输出负压?

大家好,这里是大话硬件。 今天分享一篇和Buck-Boost拓扑相关的问题,也是在最开始接触Buck-Boost芯片时,就在内心产生了疑问。 在开始学习DC-DC拓扑时,很多资料都说,非隔离型的DC-DC拓扑常见的有3种,分别是…

C语言进阶---文件操作

1、什么是文件 磁盘上的文件是文件 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。(从文件功能的角度来分类的)。 1.1、程序文件 包括源程序文件(后缀为.c),目标文件&#x…

若依(ruoyi-cloud)脚手架解读,一篇精通,包票上手~

视频教程传送门: 基于SpringCloud Alibaba技术栈,若依微服务版(RuoYi-Cloud)脚手架入门精解,保证上手那种~_哔哩哔哩_bilibili基于SpringCloud Alibaba技术栈,若依微服务版(RuoYi-Cloud)脚手架入门精解,保证上手那种~…

vscode 插件系统的运行机制!

做vscode二次开发有一段时间了,平时都是任务比较重,最近有时间做下总结,详细的讲解下vscode 插件系统的运行机制,vscode做为最受欢迎的编辑器,有着庞大的插件市场。其插件系统确实很复杂,文章很长&#xff…

构建交互式数据集展示:Gradio的Dataset模块详解

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Visual C++中的引用的具体理解

我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊 Visual C中的引用。 在C中有一个引用的概念。引用就是一个变量的别名,它需要用另一个变量或对象来初始化自身。引用就像一个人的外号一样,例如:有一个人的名字叫诸葛大力,…

【压缩空气储能】非补燃压缩空气储能系统集成的零碳排放综合能源优化调度(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

软件工程作业创建表

设计表 4.按专业统计课程数量: sql SELECT Major, COUNT(*) AS Num FROM Course GROUP BY Major 5.按专业查询所有课程信息: sql SELECT * FROM Course WHERE Major 信息技术 6.统计“信息技术”专业的课程数量: sql SELECT COUNT(*) FROM Course WHERE Major 信息技术…

SIM长序列处理

原论文:Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click-Through Rate Prediction 主要是为了解决长序列带来的计算复杂度问题 解决方法是第一阶段先进性search,有softsearchhardsearch两种方式。 然后用mult-h…

SAP HANA使用SQL创建SCHEMA:

语法是 CREATE SCHEMA “<Schema_Name>” 使用图形方法创建 SAP HANA 表&#xff1a; 创建图形计算视图&#xff1a;

Spring面试题--单例bean是线程安全的吗?

Spring框架中的单例bean是线程安全的吗&#xff1f; 这个问题有一个前提 Spring框架中的bean是单例的吗&#xff1f; 答&#xff1a;是&#xff0c;我们可以通过scope注解来设置当前的bean是不是单例的 singleton : bean在每个Spring IOC容器中只有一个实例。 prototype&am…

LeetCode刷题 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些…

基于Python所写的今天吃什么小程序

点击以下链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87979945 《今天吃什么》程序使用说明 小程序端 启动WhatToEat/WhatToEat下的venv虚拟环境&#xff0c;运行python manage.py runserver命令启动Flask。然后打开微信开发者工具并扫码登…