三、mongdb 查询
一、 MongoDB文档检索
MongoDB中有多种方式可以检索文档:
1.1 查询过滤器
使用查询过滤器从集合中检索文档。查询过滤器是一组键值对,可按字段值查询文档。
例如:
db.col.find({"status":"A"})
这个示例查询status等于“A”的文档。
1.2 范围查询操作符
范围查询操作符可用于构建基于值范围的查询过滤器。例如:
- lt、lt、lt、lte、gt、gt、gt、gte:分别表示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和limit和skip
在管道中限制和跳过结果数量。
例如,跳过前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是自诞生以来企业使用率最高的编程语言,作为一种编程语言,它比许多竞争对手都有更多的优点…...
Lsof命令介绍
LSOF(List Open Files)是一款功能强大的开源工具,用于列出当前系统上打开的文件和进程。该工具可以帮助系统管理员和开发人员快速查找正在使用某个文件的进程,以及在系统上使用磁盘空间最多的进程。 本文将介绍LSOF的基本用法和常…...
LeetCode题目笔记——1487. 保证文件名唯一
文章目录题目描述题目链接题目难度——中等方法一:哈希表代码/Python代码/C总结题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同…...
【概念辨析】结构体内存对齐
一、什么是结构体内存对齐 是使得结构体的每个成员能够在及其访问的特定存储单元上的一种方法。 通过这种方法可以使得机器访问效率加快,也可以使得平台一致性变高。 二、结构体对齐的规则 有两组代码: #define _CRT_SECURE_NO_WARNINGS#include <…...
pg mysql oracle 中的schema
1、schema。 pg中的schema表示当前db中数据库对象的命名空间(namespace),数据库对象包括但不限于表、函数、视图、索引等。 对于熟悉mysql的人来说,在第一次看到pg中的schema的概念时,可能会疑惑,schema不是表示database的吗&…...
电脑快捷方式删除文件后四种找回方法
快捷指令是一种用作替代快捷键操作的技术。也可以称为“快捷键”,“快捷方式”或“快捷键序列”,它们允许用户在非常快速和方便的方式建立特定操作序列,这对于执行重复性或提高效率非常有用。通过使用快捷指令,您可以执行快速复制…...
Session会话管理
会话管理Web会话管理概述常见的Web应用会话管理方式基于Server端的Session的管理方式基于Cookie的Session的管理方式Cookie与Session最大的区别Cookie-Based的管理方式基于Token-Based的管理方式Web会话管理的安全问题Web会话管理概述 会话管理:在进行人机交互的时…...
极智开发 | ubuntu源码编译cuda版opencv
欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文介绍一下 ubuntu源码编译cuda版opencv。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 如果你需要源码编译cpu版的opencv可以…...
umi学习(umi4)
umi 官方文档 官方建议使用 pnpm node版本在 14 以上 创建项目: 根据 包管理工具不同 ,官方推荐 这里使用 pnpm: 1. pnpm dlx create-umilatest 2. 选择模板 (这里使用 Simple App) 想对module处理需要使用 Ant Desig…...
EasyPoi的excel模板预览与下载、导出简单/复杂数据
官方文档地址:easypoi官网,官方仅供参考,部分描述有问题 excel模板预览 准备工作 事先将整理好的excel模板存在项目中,如图 excel模板预览代码 GetMapping("excel")ApiOperation("excel预览")NoLogpubli…...
收个滴滴Offer:从小伙三面经历,看看需要学点啥?
说在前面 在尼恩的(50)读者社群中,经常有小伙伴,需要面试大厂。 后续结合一些大厂的面试真题,给大家梳理一下学习路径,看看大家需要学点啥? 这里也一并把题目以及参考答案,收入咱…...
Spark Shuffle解析
1 Shuffle的核心要点 1.1 ShuffleMapStage与ResultStage ShuffleMapStage与ResultStage 在划分stage时,最后一个stage称为finalStage,它本质上是一个ResultStage对象,前面的所有stage被称为ShuffleMapStage。 ShuffleMapStage的结束伴随着…...
Qt 解决程序全屏运行弹窗引发任务栏显示
文章目录摘要在VM虚拟机器中测试setWindowFlags()关键字: Qt、 Qt::WindowStayOnTopHint、 setWindowFlags、 Qt::Window、 Qt::Tool摘要 今天眼看项目就要交付了,结果在测试程序的时候,发现在程序全品情况下,点击输入框&#x…...
【进阶】2、搭建K8s集群【v1.23】
[toc] 一、安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络…...
11面向接口编程(下):一切皆服务,服务基于协议
服务容器的实现 一个服务容器主要的功能是:为服务提供注册绑定、提供获取服务实例,所以服务容器至少有两个方法:注册方法 Bind、获取实例方法 Make。 对于注册的方法,直接将一个服务提供者注册到容器中,参数是之前定…...
不要以没时间来说测试用例写不好
工作当中,总会有人为自己的测试用例写得不够好去找各种理由,时间不够是我印象当中涉及到最多的,也是最反感。想写好测试用例,前提是测试分析和需求拆解做的足够好,通过xmind或者UML图把需求和开发设计提供的产品信息提炼出来。 我个人的提炼标准一般是&…...
day57-day58【代码随想录】二刷数组
文章目录前言一、螺旋矩阵||(力扣59)二、螺旋矩阵(力扣54)三、顺时针打印矩阵(剑指 Offer29)四、在排序数组中查找元素的第一个和最后一个位置(力扣34)【二分查找】五、有多少小于当…...
【NLP】自动化计算文本文件TTR的bash脚本
自动化计算文本文件TTR的bash脚本 简介 这是一个可以计算文本文件TTR的bash脚本,文件名为:calculate_TTR.sh。它会接收一个文件名作为参数,并输出总单词数、特异单词数和TTR。 TTR是什么 TTR(Type-Token Ratio)是用…...
蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、该题目如下二、使用步骤1.矩阵键盘实现2.温度传感器ds18b20的实现总结提示:以下是本篇文章正文内容,下面案例可供参考 一、该题目如下 分…...
Ubuntu 新人上手 Microk8s 指南
文章目录1. 什么是 Ubuntu 核心2. 什么是 Kubernetes3. 什么是MicroK8s4. 为什么选择 Microk8s on Core5. 安装Ubuntu Core6. Ubuntu Core上安装 MicroK8S7. 启动 Microk8s8. 启用必要的 MicroK8s 插件9. 部署示例容器工作负载10. 检查部署状态并访问您的应用程序11. 管理镜像1…...
初阶C语言——实用调试技巧【详解】
文章目录1. 什么是bug?2. 调试是什么?有多重要?2.1 调试是什么?2.2 调试的基本步骤2.3 Debug和Release的介绍3.学会使用快捷键4.调试的时候查看程序当前信息4.1 查看临时变量的值4.2 查看内存信息4.3 查看调用堆栈4.4 查看汇编信息…...
Android 绘图基础:Canvas画布——自定义View基础(绘制表盘、矩形、圆形、弧、渐变)
Canvas画布,通过它我们可以自定义一个View,设置View的相关效果之类的。感觉用法差不多,重要的是要理解方法中传入的参数的含义,比如float类型的参数,传递的是坐标,已开是没有注意传入的参数时坐标,导致我迷…...
js拷贝数组对象:浅拷贝深拷贝
前言 js拷贝数组对象:浅拷贝&深拷贝,包括:Object.assign、concat、slice、JSON.parse(JSON.stringify()) 场景:弹窗选择组织结构(树形结构),选择后显示相关数据至输入框中(每次选…...
【C++】string类的使用
目录 一、标准库中的string类 二、string类的常用接口 1、string类对象的常见构造 2、string类对象的容量操作 2.1、size 与 length 2.2、capacity 与 reserve 2.3、resize 2.4、总结 3、string类对象的访问及遍历操作 3.1、operator[] 与 at 3.2、begin end 3.3、…...
东莞模具网站建设/郑州竞价代运营公司
在某些情况下,虽然可以使用单个变量来存储信息,但是如果需要存储的信息较多(例如存储 50 名学生的成绩),这时再依次创建变量声明并赋值显得非常麻烦。 随着处理的信息量越来越大,工作也就越来越烦琐&#x…...
网页设计怎么做版式/seo托管服务
计算机技术支持人员个人简历模板个人信息姓名:ijianli.com 性别:男 婚姻状况:未婚 出生日期:19**年1月 籍贯:广西xx 现居住:南宁毕业学校:XX 专业:XXXX 学历࿱…...
北京交友网站排行榜/怎样在百度上做广告推广
每个品牌都不可避免地会遭遇一些消费者在小红书上发布的负面评价或者投诉,那么小红书负面笔记怎么处理呢?下面来给大家说说品牌需要注意的几个点。一、认真阅读并理解负面笔记当发现小红书上的负面笔记后,品牌方首先要认真阅读并理解其内容,…...
建立独立域名的网站怎样才算是自己的/网站快速收录付费入口
前面两篇我们分析了怎样通过ST语言对一组数据进行排序。今天我们接着分享,如何通过ST语言,求出一组数据的最大值、最小值、和值、均值。1.建立全局标签声明变量2.程序的编写如果数组数据是"FLOAT"型的,那两段转换就可以省去&#x…...
做网上商城网站哪家好/国内最好用免费建站系统
2019独角兽企业重金招聘Python工程师标准>>> HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格( )是常规空格的宽度,可运行于所有主流浏览器。其他几种空格&…...
给朋友做的相册网站没有了/信息检索关键词提取方法
原文地址:http://www.cnblogs.com/GXZlegend/p/6832537.html 题目描述 有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些请求.一个搬运工从第i个请求的位置把东西搬到第j个请求的位置需要一…...