当前位置: 首页 > news >正文

三、mongdb 查询

一、 MongoDB文档检索

MongoDB中有多种方式可以检索文档:

1.1 查询过滤器

使用查询过滤器从集合中检索文档。查询过滤器是一组键值对,可按字段值查询文档。
例如:

db.col.find({"status":"A"})

这个示例查询status等于“A”的文档。

1.2 范围查询操作符

范围查询操作符可用于构建基于值范围的查询过滤器。例如:

  • lt、lt、ltlte、gt、gt、gtgte:分别表示less than、less than or equal、greater than、greater than or equal。
  • $in:匹配数组中任一值
  • $nin:匹配不在数组中的任何值

例如:

db.col.find({"age":{"$gt":20,"$lt":30}})

这个示例查询age在20到30之间的文档。

1.3 正则表达式

可以使用正则表达式查询字符串字段的值。使用$regex操作符指定正则表达式。
例如:

db.col.find({"name": {"$regex" : /^A/}})

这个示例查询以A开头的name字段的文档。

1.4 投影操作

可以使用投影操作从文档中选择需要的字段。使用$project操作指定要包含/排除的字段。
例如:

db.col.find({},{"name":1,"address":1})

这个示例查询所有文档,但只返回name和address字段。_id字段默认返回,需要显式排除。

1.5 排序

可以使用$sort操作对结果进行排序。
例如:

db.col.find().sort({"age":1})

这个示例查询所有文档,并按age字段升序排列结果。

1.6 限制结果数量

可以使用$limit操作限制结果数量。例如:

db.col.find().limit(5)

这个示例查询最多5个文档。

1.7 跳过结果数量

可以使用$skip操作跳过结果数量。例如:

db.col.find().skip(10).limit(5)

这个示例跳过前10个结果,然后返回接下来的5个结果。

1.8 索引

可以在字段上创建索引以加快查询速度。确保索引字段是你查询过滤器和排序操作中使用的字段。
例如,如果经常按age字段查询文档,那么在age字段上创建索引将大大提高查询性能。
索引可在创建集合时指定,也可随时添加/删除。
例如,创建age索引:

db.col.createIndex({"age":1})

1.9 文本索引

可以在字符串字段上创建文本索引,以便执行文本搜索查询。
例如,如果有一个内容字段包含文章文本,则可以在该字段上创建文本索引,然后执行基于关键字的搜索查询。
例如,创建内容文本索引:

db.col.createIndex({"内容": "text"})

然后可以执行文本搜索:

db.col.find({"$text": {"$search": "mongodb 文档检索"}})

这个示例找到包含“mongodb 文档检索”的内容字段的文档。

1.10 地理空间索引

可以在包含GeoJSON对象的字段上创建2dsphere索引,以执行地理空间操作(例如查询附近的点)。
例如,如果有一个位置字段包含点的经度和纬度,可以在该字段上创建2dsphere索引:
db.places.createIndex({“位置”: “2dsphere”})

然后可以执行地理空间查询,如查询某点附近100千米内的文档:

db.places.find({
"位置": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [x, y]
},
"$maxDistance": 100000
}
}
})

这个示例找到位置字段中点距离(x,y)100千米内的文档。

1.11 执行查询

可以通过以下方式执行MongoDB查询:

  • db.col.find()
  • db.col.findOne() //查询一个文档
  • db.col.find().limit(n) //限制n个结果
  • db.col.find().skip(n) //跳过前n个结果
  • db.col.find().sort({…}) //排序结果
  • db.col.findOne({ … }, { field: 1 }) //只返回指定字段
  • db.col.count({ … }) //统计结果数量
  • db.col.distinct(field) //获取指定字段的不同值

可以使用pretty()方法以易读的方式查看查询结果。
例如:

db.col.find().pretty()

在MongoDB Compass中也可以视觉化执行查询、查看查询执行计划和索引使用情况。

二、MongoDB聚合框架

MongoDB的聚合框架提供了管道操作,用于处理数据记录并返回计算结果。
聚合管道是把多个操作符链接在一起的过程。每个操作符会接收输入文档,对其进行转换处理,然后输出。
下面是一些常用的聚合操作符:

2.1 聚合框架

MongoDB的聚合框架提供了管道操作,可用于执行复杂的聚合查询。
例如,以下聚合管道查询获取age字段平均值大于$avg的文档数量:

db.col.aggregate([
{"$group": {"_id": "null", "avgAge": {"$avg": "$age"}}},
{"$addFields": {"age": "$age"}},
{"$match": {"age": {"$gt": "$avgAge"}}}
])

这个示例使用group阶段计算age平均值,然后group阶段计算age平均值,然后group阶段计算age平均值,然后addFields重新添加age字段,最后$match过滤age大于平均值的文档。

2.2 $group

将集合中的文档分组,可用于统计结果。
例如,按性别分组并计数:

db.users.aggregate([
{"$group": {"_id": "$gender", "count": {"$sum": 1}}}
])

这个示例会给出gender字段为male和female的文档数量。

2.3 $match

在聚合管道中过滤数据。与db.col.find()类似,但在聚合操作符中使用。
例如,只聚合年龄大于30的用户:

db.users.aggregate([
{"$match": {"age": {"$gt": 30}}},
{"$group": {"_id": "$gender", "count": {"$sum": 1}}}
])

2.4 $sort

在管道中对结果进行排序。
例如,按count降序排序结果:

db.users.aggregate([
{"$group": {"_id": "$gender", "count": {"$sum": 1}}},
{"$sort": {"count": -1}}
])

2.5 limit和limit和limitskip

在管道中限制和跳过结果数量。
例如,跳过前5个结果,然后返回5个结果:

db.users.aggregate([
{"$group": {"_id": "$gender", "count": {"$sum": 1}}},
{"$sort": {"count": -1}},
{"$skip": 5},
{"$limit": 5}
])

2.6 $unwind

将数组类型字段拆分为单独的文档。
例如,如果有一个posts数组字段,每个文档包含用户发表的多篇帖子,可以使用$unwind操作将posts拆分为单独的帖子文档:

db.users.aggregate([
{"$unwind": "$posts"}
])

2.7 $project

用于修改输入文档的结构。可以用来重命名、增加或删除字段。
例如,删除_id字段,重命名count为数量:

db.users.aggregate([
{"$group": {"_id": "$gender", "count": {"$sum": 1}}},
{"$project": {"_id": 0, "数量": "$count"}}
])

2.8 $addFields

用于向文档添加新字段。
例如,将count字段增加100,然后重命名为total:

db.users.aggregate([
{"$group": {"_id": "$gender", "count": {"$sum": 1}}},
{"$addFields": {"total": {"$add": ["$count", 100]}}},
{"$project": {"_id": 0, "total": 1}}
])

2.9 执行聚合查询

可以通过db.col.aggregate()执行聚合查询。
例如:

db.users.aggregate([
{"$group": {"_id": "$gender", "count": {"$sum": 1}}}
])

可以使用pretty()方法以易读的方式查看聚合查询结果。
例如:

db.users.aggregate([
{"$group": {"_id": "$gender", "count": {"$sum": 1}}}
]).pretty()

这里包含了比较常用的mongodb的操作了,其余的可以看官方文档或者私聊我本人进行补充。

上一章: 二、MongoDB简介及基本操作
下一章: 四、Springboot连接mongodb

相关文章:

三、mongdb 查询

一、 MongoDB文档检索 MongoDB中有多种方式可以检索文档: 1.1 查询过滤器 使用查询过滤器从集合中检索文档。查询过滤器是一组键值对,可按字段值查询文档。 例如: db.col.find({"status":"A"})这个示例查询status等于“A”的文档。 1.2 范围查询操作符…...

python的 ping 网络状态监测方法(含多IP)

ping 基本概念 ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Messag…...

【独家】华为OD机试提供C语言题解 - 单词反转

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明单词…...

Linux docker环境安装,docker-compose安装,jdk17安装

安装docker 删除之前安装的docker yum remove docker \docker-client \docker-client-latest \docker- common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-sqlinux \docker-engine-selinux \docker-engine \docker-ce安装yum工具 yum install -y y…...

界面开发(3)--- PyQt5用户登录界面连接数据库

文章目录数据库账户注册账号登录找回密码为了实现用户登录界面的登录功能,我们必须建立一个数据库,并把账号和对应的密码,存储到数据库中。如果输入的账号和密码与数据库中的一致,那我们就允许用户登录,进入新的界面。…...

以下真的没有任何要写的了,我需要凑字数,请大家原谅

以下真的没有任何要写的了,我需要凑字数,请大家原谅!!!!!!!!!!!!!!!&#…...

2023年 Java 发展趋势

GitHub 语言统计表明,Java在编程语言中排名第二,而在2022年的TIOBE指数中,Java排在第四。 抛开排名,Java是自诞生以来企业使用率最高的编程语言,作为一种编程语言,它比许多竞争对手都有更多的优点&#xf…...

Lsof命令介绍

LSOF(List Open Files)是一款功能强大的开源工具,用于列出当前系统上打开的文件和进程。该工具可以帮助系统管理员和开发人员快速查找正在使用某个文件的进程,以及在系统上使用磁盘空间最多的进程。 本文将介绍LSOF的基本用法和常…...

LeetCode题目笔记——1487. 保证文件名唯一

文章目录题目描述题目链接题目难度——中等方法一:哈希表代码/Python代码/C总结题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同…...

【概念辨析】结构体内存对齐

一、什么是结构体内存对齐 是使得结构体的每个成员能够在及其访问的特定存储单元上的一种方法。 通过这种方法可以使得机器访问效率加快&#xff0c;也可以使得平台一致性变高。 二、结构体对齐的规则 有两组代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS#include <…...

pg mysql oracle 中的schema

1、schema。 pg中的schema表示当前db中数据库对象的命名空间(namespace)&#xff0c;数据库对象包括但不限于表、函数、视图、索引等。 对于熟悉mysql的人来说&#xff0c;在第一次看到pg中的schema的概念时&#xff0c;可能会疑惑&#xff0c;schema不是表示database的吗&…...

电脑快捷方式删除文件后四种找回方法

快捷指令是一种用作替代快捷键操作的技术。也可以称为“快捷键”&#xff0c;“快捷方式”或“快捷键序列”&#xff0c;它们允许用户在非常快速和方便的方式建立特定操作序列&#xff0c;这对于执行重复性或提高效率非常有用。通过使用快捷指令&#xff0c;您可以执行快速复制…...

Session会话管理

会话管理Web会话管理概述常见的Web应用会话管理方式基于Server端的Session的管理方式基于Cookie的Session的管理方式Cookie与Session最大的区别Cookie-Based的管理方式基于Token-Based的管理方式Web会话管理的安全问题Web会话管理概述 会话管理&#xff1a;在进行人机交互的时…...

极智开发 | ubuntu源码编译cuda版opencv

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文介绍一下 ubuntu源码编译cuda版opencv。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 如果你需要源码编译cpu版的opencv可以…...

umi学习(umi4)

umi 官方文档 官方建议使用 pnpm node版本在 14 以上 创建项目&#xff1a; 根据 包管理工具不同 &#xff0c;官方推荐 这里使用 pnpm&#xff1a; 1. pnpm dlx create-umilatest 2. 选择模板 &#xff08;这里使用 Simple App&#xff09; 想对module处理需要使用 Ant Desig…...

EasyPoi的excel模板预览与下载、导出简单/复杂数据

官方文档地址&#xff1a;easypoi官网&#xff0c;官方仅供参考&#xff0c;部分描述有问题 excel模板预览 准备工作 事先将整理好的excel模板存在项目中&#xff0c;如图 excel模板预览代码 GetMapping("excel")ApiOperation("excel预览")NoLogpubli…...

收个滴滴Offer:从小伙三面经历,看看需要学点啥?

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常有小伙伴&#xff0c;需要面试大厂。 后续结合一些大厂的面试真题&#xff0c;给大家梳理一下学习路径&#xff0c;看看大家需要学点啥&#xff1f; 这里也一并把题目以及参考答案&#xff0c;收入咱…...

Spark Shuffle解析

1 Shuffle的核心要点 1.1 ShuffleMapStage与ResultStage ShuffleMapStage与ResultStage 在划分stage时&#xff0c;最后一个stage称为finalStage&#xff0c;它本质上是一个ResultStage对象&#xff0c;前面的所有stage被称为ShuffleMapStage。 ShuffleMapStage的结束伴随着…...

Qt 解决程序全屏运行弹窗引发任务栏显示

文章目录摘要在VM虚拟机器中测试setWindowFlags()关键字&#xff1a; Qt、 Qt::WindowStayOnTopHint、 setWindowFlags、 Qt::Window、 Qt::Tool摘要 今天眼看项目就要交付了&#xff0c;结果在测试程序的时候&#xff0c;发现在程序全品情况下&#xff0c;点击输入框&#x…...

【进阶】2、搭建K8s集群【v1.23】

[toc] 一、安装要求 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#xff1a; 一台或多台机器&#xff0c;操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘30GB或更多集群中所有机器之间网络…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...