【NoSQL数据库】MongoDB数据库——文档的查询操作(多条件查询、聚合aggregate、管道)

news2025/2/25 3:42:30

往期文章:

​​​​​​【NoSQL数据库】MongoDB数据库的安装与卸载-CSDN博客

【NoSQL数据库】MongoDB数据库——集合和文档的基本操作(创建、删除、更新、查询)-CSDN博客

目录

一、MongoDB文档查询原理

1、使用 find() 方法进行文档基本查询

2、文档查询条件的使用

3、特定类型查询

4、聚合查询

二、 MongoDB文档查询操作

1、创建集合

2、插入文档数据

3、查询文档数据

4、统计文档数据

5、简单条件查询

6、多条件查询

7、or条件查询

8、AND 和 OR 联合查询

9、使用聚合aggregate进行查询

10、管道使用

三、学习笔记


一、MongoDB文档查询原理

1、使用 find() 方法进行文档基本查询

        语法格式如下:db.collection.find(query,projection)

        参数说明:

        query :可选,使用查询操作符指定查询条件

        projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

2、文档查询条件的使用

操作

格式

范例

RDBMS中的类似语句

等于

{<key>:<value>}

db.col.find({"by":"x"}).pretty()

where by = 'x'

小于

{<key>:{$lt:<value>}}

db.col.find({"likes":{$lt:50}}).pretty()

where likes < 50

小于或等于

{<key>:{$lte:<value>}}

db.col.find({"likes":{$lte:50}}).pretty()

where likes <= 50

大于

{<key>:{$gt:<value>}}

db.col.find({"likes":{$gt:50}}).pretty()

where likes > 50

大于或等于

{<key>:{$gte:<value>}}

db.col.find({"likes":{$gte:50}}).pretty()

where likes >= 50

不等于

{<key>:{$ne:<value>}}

db.col.find({"likes":{$ne:50}}).pretty()

where likes != 50

3、特定类型查询

        针对特定类型的文档进行查询,如查询键为NULL的空文档

4、聚合查询

        MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。db.collection.aggregate()是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。

表达式

描述

实例

$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文档查询操作

1、创建集合

使用test数据库,并创建items集合,mongodb语句如下所示:

Use test

Db.creatCollection("items")

2、插入文档数据

一共有八个订单的商品信息,如下所示:

db.items.insert([

{"quantity":2,price:5.0,pnumber:"p003"},

{"quantity":2,price:8.0,pnumber:"p002"},

{"quantity":1,price:4.0,pnumber:"p002"},

{"quantity":2,price:4.0,pnumber:"p001"},

{"quantity":4,price:10.0,pnumber:"p003"},

{"quantity":10,price:20.0,pnumber:"p001"},

{"quantity":10,price:20.0,pnumber:"p003"},

{"quantity":5,price:10.0,pnumber:"p002"}

])

3、查询文档数据

查询刚才插入的数据,查询语句如下所示,其中pretty()可以格式化显示查询结果:

db.items.find().pretty()

4、统计文档数据

统计items的文档数据,使用如下语句:

db.items.count()

5、简单条件查询

查询价格大于5的商品数据,如下所示:

db.items.find({price:{$gt:5}})

6、多条件查询

查询quantity为10且价格大于等于5的商品数据,查询语句如下所示:

db.items.find({quantity:10,price:{$gte:5}})

7、or条件查询

查询quantity为10或价格大于等于5的商品数据,查询语句如下所示,比起上一题的多条件查询有结构上的区别:

db.items.find({$or:[{quantity:10},{price:{$gte:5}}]})

8、AND 和 OR 联合查询

查询pnumber为“p003”且quantity为10或价格大于等于5的商品数据,如下所示:

db.items.find({pnumber:"p003",$or:[{quantity:10},{price:{$gte:5}}]})

9、使用聚合aggregate进行查询

(1)统计订单中所有商品的数量,即统计quantity的总和,使用$group和$sum,如下所示:

db.items.aggregate([{$group:{_id:null,total:{$sum:"$quantity"}}}])

(2)通过产品类型来进行分组,然后在统计卖出的数量,如下所示:

db.items.aggregate([{$group:{_id:"$pnumber",total:{$sum:"$quantity"}}}])

(3)通过相同的产品类型来进行分组,然后查询相同产品类型卖出最多的订单详情,如下所示:

db.items.aggregate([{$group:{_id:"$pnumber",max:{$max:"$quantity"}}}])

(4)通过相同的产品类型来进行分组,然后查询每个订单详情相同产品类型卖出的平均价格,这里用到$avg如下所示:

db.items.aggregate([{$group:{_id:"$pnumber",price:{$avg:"$price"}}}])

10、管道使用

通过相同的产品类型来进行分组,统计各个产品数量,然后获取最大的数量。这里用到两个$group,第一个是筛选相同的产品类型并统计产品数量,第二个是找到最大的产品数量,如下所示:

db.items.aggregate([{$group:{_id:"$pnumber",total:{$sum:"$quantity"}}},{$group:{_id:null,max:{$max:"$total"}}}])

三、学习笔记

         MongoDB数据库的文档查询操作涉及到文档查询需要用到的一些查询表达式,比如$sum用于计算总和、$avg用于计算平均值,$max和$min分别用于获取最大值和最小值,还有关于比较的表达式,如$lt代表小于,$lte代表小于等于,$gt代表大于,$gte代表大于等于,$ne代表不等于,以及查询条件表达式,比如$or。

        db.collection.find()用于普通查询,聚合查询使用db.collection.aggregate(),$group拿来按照特定条件分组查询统计。

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

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

相关文章

git pull error: cannot lock ref

Git: cannot lock ref ‘refs/remotes/origin/feature/xxx’: refs/remotes/origin/feature/xxx/car’ exists; cannot create refs/remotes/origin/feature/xxx git remote prune origin重新整理服务端和本地的关联关系即可

Harnessing Large Language Models for Training-free Video Anomaly Detection

标题&#xff1a;利用大型语言模型实现无训练的视频异常检测 原文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2024/papers/Zanella_Harnessing_Large_Language_Models_for_Training-free_Video_Anomaly_Detection_CVPR_2024_paper.pdf 源码链接&#xff1a;ht…

Flutter解压文件并解析数据

Flutter解压文件并解析数据 前言 在 Flutter 开发中&#xff0c;我们经常需要处理文件的读取和解压。 这在处理应用数据更新、安装包、存档文件等场景中尤为常见。 本文将介绍如何在Flutter中使用archive插件来解压文件并解析数据。 准备 在开始之前&#xff0c;我们需要…

论文阅读:Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris

The Tabula Muris Consortium., Overall coordination., Logistical coordination. et al. Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris. Nature 562, 367–372 (2018). 论文地址&#xff1a;https://doi.org/10.1038/s41586-018-0590-4 代码地址…

【算法】模拟

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;替换所有的问号 二&#xff1a;提莫攻击 三&#xff1a;z字形变换 四&#xff1a;外观…

MongoDB整合SpringBoot

MongoDB整合SpringBoot 环境准备 1.引入依赖 <!--spring data mongodb--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 2.配置yml spr…

【简洁明快】使用python读取数据建立pptx (python-pptx图文调整案例)

使用python自动读取数据建立pptx 前言如何使用 Python 自动生成 PPTX第一步&#xff1a;安装所需库第二步&#xff1a;创建一个新的 PPTX第三步&#xff1a;添加幻灯片第四步&#xff1a;添加内容添加文本添加图片第五步&#xff1a;保存 PPTX 图文实操案例&#xff08;自动读取…

三维扫描检测在汽车制造中的应用

三维扫描&#xff0c;通过先进三维扫描技术获取产品和物体的形面三维数据&#xff0c;建立实物的三维图档&#xff0c;满足各种实物3D模型数据获取、三维数字化展示、3D多媒体开发、三维数字化存档、逆向设计、产品开发、直接3D打印制造或辅助加工制造等一系列的应用。 三维扫描…

flyway执行sql遇到变量执行报错解决

前两天在公司使用flyway工具执行sql时&#xff0c;开发写的sql里面有变量&#xff0c;于是这个flyway工具不识别这个变量直接报错&#xff0c;不接着往下执行了。报错信息如下&#xff1a; flyway工具执行sql报错 information: No value provided for placeholder: ${ep1} 于是…

go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库

在搭建 SDK 项目并结合 Git 操作标签&#xff08;Tag&#xff09;时&#xff0c;通常会涉及项目初始化、版本管理、Git 标签的创建与管理等内容。以下是一个完整的步骤指南&#xff0c;帮助您搭建 SDK 项目并学习如何使用 Git 标签。 ### 1. **搭建 SDK 项目** 首先&#xff…

机器学习算法的核心理论小总结

机器学习算法的核心在于利用数据构建模型以解决实际问题&#xff0c;而理解其理论基础是高效应用的关键。本文从机器学习的基本概念出发&#xff0c;详细解析监督学习中的几种经典算法&#xff0c;如逻辑回归、决策树和支持向量机&#xff08;SVM&#xff09;。同时&#xff0c…

3.STM32通信接口之SPI通信---SPI实战(W25Q64存储模块介绍)《精讲》

上一节介绍了SPI的通信过程和方法&#xff0c;接下来就要进行STM32与外围模块通信了&#xff0c;这个模块是一块非易失型存储芯片&#xff0c;能够提供8MB的存储空间。接下来跟着Whappy脚步&#xff0c;进行探索新大陆吧&#xff01;【免费】W25Q64(中英文数据手册)资源-CSDN文…

第七节(1)、T型加减速转动【51单片机-TB6600驱动器-步进电机教程】

摘要&#xff1a;本节介绍步进电机T型加减速的控制方法&#xff0c;分2个小节&#xff0c;本小节主要内容为该控制方法的推导与计算&#xff0c;第二节对T型加减速进行了简化计算 一.加速阶段计算 1.1 计算时间与步数关系 根据位移公式可得&#xff1a; a n g l e 0 n ∗ s…

Python123_Python程序语言设计基础_Python基本图形绘制

turtle八边形绘制 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬ 描述 使用tur…

刘铁猛p3 C# 控制台程序引用System.Windows.Forms报错,无法引用程序集 解决方法

学习刘铁猛老师c#入门详解第三集 引用System.Windows.Forms时报错了 错误图例 为什么控制台应用添加项目引用里面为什么找不到任何项目&#xff0c;同时从com里面加的引用会出现警告&#xff1f; 其实是创建控制台程序的时候出错了 解决方法 重新创建控制台程序 选控制台应…

Linux下,用ufw实现端口关闭、流量控制(二)

本文是 网安小白的端口关闭实践 的续篇。 海量报文&#xff0c;一手掌握&#xff0c;你值得拥有&#xff0c;让我们开始吧&#xff5e; ufw 与 iptables的关系 理论介绍&#xff1a; ufw&#xff08;Uncomplicated Firewall&#xff09;是一个基于iptables的前端工具&#xf…

Leetcode 每日一题 290.单词规律

目录 一、问题分析 二、解题思路 三、代码实现 四、复杂度分析 五、总结 在编程的世界里&#xff0c;我们常常会遇到各种有趣的字符串匹配问题。今天要探讨的就是这样一个问题&#xff1a;给定一种规律 pattern 和一个字符串 s&#xff0c;判断 s 是否遵循与 pattern 相同…

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展&#xff0c;旅游已经成为人…

Mybatis-Plus的主要API

一、实体类操作相关API BaseMapper<T>接口 功能&#xff1a;这是 MyBatis - Plus 为每个实体类对应的 Mapper 接口提供的基础接口。它提供了一系列基本的 CRUD&#xff08;增删改查&#xff09;操作方法。例如insert(T entity)方法用于插入一条记录&#xff0c;d…

第一个 JSP 程序

一个简单的 JSP 程序&#xff1a; 使用 IDEA 开发工具新建一个 maven 项目&#xff0c;具体操作如图所示&#xff1a; 配置 Tomcat 服务器 项目结构如下图所示&#xff1a; 3. 修改 index.jsp 页面的代码&#xff1a; <% page language"java" contentType&q…