MongoDB查询

一、find

1、简单查询

#查寻所有文档
>db.foo.find()#查询包含name=hgq的文档
>db.foo.find({"name":"hgq"})
#查询包含name=hgq,age=12的文档,默认为全部条件都匹配
>db.foo.find({"name":"hgq","age":12})

2、返回指定的键

> db.foo.find({"name":"hgq"},{"name":1,"_id":0})
{ "name" : "hgq" }

前面的{}中为匹配条件,后面{}中的为要显示的键值,1为显示,由于_id是默认会显示的,可以通过0来不显示

二、查询条件

1、查询条件

常见的比较符,“ l t ”(小于),“ lt”(小于),“ lt(小于),lte”(小于等于),“ g t ”(大于),“ gt”(大于),“ gt(大于),gte”(大于等于)

比如查询一个数值范围,大于等于5,小于等于12的

>db.foo.find({"age":{"$gte":5,"$lte":12}})
{ "_id" : ObjectId("666fde7e5d80c26396aa6106"), "hgq" : "tt", "age" : 5 }
{ "_id" : ObjectId("66714e5a943d8ff6b7fefa95"), "name" : "hgq", "age" : 12 }

也可以使用“$ ne”(不等于)来进行查询

>db.foo.find({"name":{"$ne":"hgq"}})

2、OR查询

mongodb中有两种方式进行OR查询,“ i n ”可以用来查询一个键的多个值,“ in”可以用来查询一个键的多个值,“ in可以用来查询一个键的多个值,or”更加通用,可以在多个键中查询给定的值

> db.foo.find({"hgq":{"$in":["11","22"]}})
{ "_id" : ObjectId("666feab6a48bbc31011e3058"), "hgq" : [ "11", "22", "33" ] }
{ "_id" : ObjectId("666febfaa48bbc31011e3059"), "hgq" : [ "11", "22", "44" ] }
{ "_id" : ObjectId("666fec7fa48bbc31011e305b"), "hgq" : [ "11", "22", "44", "55" ] }

类似的还有“$nin”,代表不包含

> db.foo.find({"hgq":{"$nin":["11","22"]}})
{ "_id" : ObjectId("666a6e7e97a427d1d07460b5"), "hgq" : "123" }
{ "_id" : ObjectId("666a723b97a427d1d07460b8"), "age" : 123 }
{ "_id" : ObjectId("666fde755d80c26396aa6105"), "hgq" : "tzy", "age" : 45 }
{ "_id" : ObjectId("666fde7e5d80c26396aa6106"), "hgq" : "tt", "age" : 5 }
{ "_id" : ObjectId("666fde8a5d80c26396aa6107"), "hgq" : "tutu", "age" : 2 }

"$or"查询多个条件,只要满足其一即可进行匹配

> db.foo.find({"$or":[{"hgq":"123"},{"age":123}]})
{ "_id" : ObjectId("666a6e7e97a427d1d07460b5"), "hgq" : "123" }
{ "_id" : ObjectId("666a723b97a427d1d07460b8"), "age" : 123 }

也可以将 o r 与 or与 orin组合起来进行使用,当age=123或者hgq里面包含11、22的

> db.foo.find({"$or":[{"hgq":{"$in":["11","22"]}},{"age":123}]})
{ "_id" : ObjectId("666a723b97a427d1d07460b8"), "age" : 123 }
{ "_id" : ObjectId("666feab6a48bbc31011e3058"), "hgq" : [ "11", "22", "33" ] }
{ "_id" : ObjectId("666febfaa48bbc31011e3059"), "hgq" : [ "11", "22", "44" ] }
{ "_id" : ObjectId("666fec7fa48bbc31011e305b"), "hgq" : [ "11", "22", "44", "55" ] }

三、特定类型的查询

1、null

null可以将值等于空的匹配出来,也可以将没有这个键的文档匹配出来

> db.foo.find()
{ "_id" : ObjectId("666a6e7e97a427d1d07460b5"), "hgq" : "123" }
{ "_id" : ObjectId("666a723b97a427d1d07460b8"), "age" : 123 }
{ "_id" : ObjectId("666fde755d80c26396aa6105"), "hgq" : "tzy", "age" : 45 }
{ "_id" : ObjectId("666fde7e5d80c26396aa6106"), "hgq" : "tt", "age" : 5 }
{ "_id" : ObjectId("666fde8a5d80c26396aa6107"), "hgq" : "tutu", "age" : 2 }
{ "_id" : ObjectId("666fdf695d80c26396aa6108"), "hgq" : "111", "type" : null } ] }
{ "_id" : ObjectId("66714e5a943d8ff6b7fefa95"), "name" : "hgq", "age" : 12 }
> db.foo.find({"hgq":null})
{ "_id" : ObjectId("666a723b97a427d1d07460b8"), "age" : 123 }
{ "_id" : ObjectId("66714e5a943d8ff6b7fefa95"), "name" : "hgq", "age" : 12 }
{ "_id" : ObjectId("6671645c02eed0c7ea6236da"), "age" : 11, "hgq" : null }

如果只想匹配存在这个键值hgq,并且值为null的,

> db.foo.find({"hgq":{"$in":[null],"$exists":true}})
{ "_id" : ObjectId("6671645c02eed0c7ea6236da"), "age" : 11, "hgq" : null }

2、正则表达式

可以使用正则表达式进行忽略大小写

> db.foo.find({"name":/HGQ/i})
{ "_id" : ObjectId("66714e5a943d8ff6b7fefa95"), "name" : "hgq", "age" : 12 }
{ "_id" : ObjectId("66716574ea376546f316a6ac"), "name" : "Hgq" }
{ "_id" : ObjectId("66716578ea376546f316a6ad"), "name" : "HGQ" }
{ "_id" : ObjectId("6671657bea376546f316a6ae"), "name" : "HGQ1" }
{ "_id" : ObjectId("6671657dea376546f316a6af"), "name" : "HGQ12" }

3、查询数组

显示包含11、22的文档$all

> db.foo.find({"hgq":{$all:["11","22"]}})
{ "_id" : ObjectId("666feab6a48bbc31011e3058"), "hgq" : [ "11", "22", "33" ] }
{ "_id" : ObjectId("666febfaa48bbc31011e3059"), "hgq" : [ "11", "22", "44" ] }
{ "_id" : ObjectId("666fec7fa48bbc31011e305b"), "hgq" : [ "11", "22", "44", "55" ] }

显示下标为2等于33的数组

> db.foo.find({"hgq.2":"33"})
{ "_id" : ObjectId("666feab6a48bbc31011e3058"), "hgq" : [ "11", "22", "33" ] }

查询特定长度的集合$size

> db.foo.find({"hgq":{"$size":3}})
{ "_id" : ObjectId("666feab6a48bbc31011e3058"), "hgq" : [ "11", "22", "33" ] }
{ "_id" : ObjectId("666febfaa48bbc31011e3059"), "hgq" : [ "11", "22", "44" ] }

4、查询内嵌文档

可以使用点表示法查询内嵌文档的键

> db.foo.find({"name.ff":"ff"})
{ "_id" : ObjectId("66723fa90f2684cca53556a6"), "name" : { "ff" : "ff", "ll" : "ll" }, "age" : 123 }
> db.foo.find({"name.ff":"ff","name.ll":"ll"})
{ "_id" : ObjectId("66723fa90f2684cca53556a6"), "name" : { "ff" : "ff", "ll" : "ll" }, "age" : 123 }

更加复杂的查询,“$elemMatch”对内嵌文档进行分组,只有在对一个内嵌文档中的多个键操作时才会用到

> db.foo.find({"hgq":{"$elemMatch":{"tt":4,"tuut":{"$gte":2}}}})
{ "_id" : ObjectId("6670056486d64f913b307096"), "hgq" : [ { "tt" : 3, "tutu" : 4 }, { "tt" : 4, "tuut" : 3 } ] }
> db.foo.find({"hgq":{"$elemMatch":{"tt":4}}})
{ "_id" : ObjectId("6670056486d64f913b307096"), "hgq" : [ { "tt" : 3, "tutu" : 4 }, { "tt" : 4, "tuut" : 3 } ] }

四、游标

1、limit、skip与sort

limit限制返回的数量

> db.foo.find().limit(3)
{ "_id" : ObjectId("666a6e7e97a427d1d07460b5"), "hgq" : "123" }
{ "_id" : ObjectId("666a723b97a427d1d07460b8"), "age" : 123 }
{ "_id" : ObjectId("666fde755d80c26396aa6105"), "hgq" : "tzy", "age" : 45 }

skip会跳过定义的前面的匹配数量,下面为不显示前三个的文档

> db.foo.find().skip(3)
{ "_id" : ObjectId("666fde7e5d80c26396aa6106"), "hgq" : "tt", "age" : 5 }
{ "_id" : ObjectId("666fde8a5d80c26396aa6107"), "hgq" : "tutu", "age" : 2 }
{ "_id" : ObjectId("666fdf695d80c26396aa6108"), "hgq" : "111", "type" : null }
{ "_id" : ObjectId("666feab6a48bbc31011e3058"), "hgq" : [ "11", "22", "33" ] }
{ "_id" : ObjectId("666febfaa48bbc31011e3059"), "hgq" : [ "11", "22", "44" ] }

sort对查询结果进行排序 1为升序,-1为降序

> db.foo.find().sort({"age":1})
{ "_id" : ObjectId("666a6e7e97a427d1d07460b5"), "hgq" : "123" }
{ "_id" : ObjectId("666fde8a5d80c26396aa6107"), "hgq" : "tutu", "age" : 2 }
{ "_id" : ObjectId("666fde7e5d80c26396aa6106"), "hgq" : "tt", "age" : 5 }
{ "_id" : ObjectId("66714e5a943d8ff6b7fefa95"), "name" : "hgq", "age" : 12 }
{ "_id" : ObjectId("666fde755d80c26396aa6105"), "hgq" : "tzy", "age" : 45 }
> db.foo.find().sort({"age":-1})
{ "_id" : ObjectId("666fde755d80c26396aa6105"), "hgq" : "tzy", "age" : 45 }
{ "_id" : ObjectId("66714e5a943d8ff6b7fefa95"), "name" : "hgq", "age" : 12 }
{ "_id" : ObjectId("666fde7e5d80c26396aa6106"), "hgq" : "tt", "age" : 5 }
{ "_id" : ObjectId("666fde8a5d80c26396aa6107"), "hgq" : "tutu", "age" : 2 }
{ "_id" : ObjectId("666a6e7e97a427d1d07460b5"), "hgq" : "123" }

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

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

相关文章

探究 IP 地址被网站封禁的原因

在我们登录各种网站、APP浏览时,可能会遇到 IP 地址被某些网站封禁的情况。很多人奇怪这是为什么呢? 首先,违反网站的使用规则是比较常见的原因之一。比如,频繁发送垃圾邮件、恶意评论、进行网络攻击或试图破解网站的安全机制等不…

数据链路层知识分享【计算机网络】【以太网帧 | MTU的影响 | ARP技术】

博客主页:花果山~程序猿-CSDN博客 文章分栏:Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 前文 一, 以…

【操作系统】操作系统课后作业-聊天程序

无名管道与有名管道的区别 无名管道: 它是半双工的,具有固定的读端和写端。 只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。 不是普通的文件,不属于其他任何文件系统,并且只存…

Electron+Vue开源软件:洛雪音乐助手V2.8畅享海量免费歌曲

洛雪音乐助手是一款功能全面且完全免费的开源音乐软件,支持在Windows、Android和iOS平台上使用。 平台支持: 桌面版:采用Electron Vue技术栈开发,支持Windows 7及以上版本、Mac OS和Linux,具有广泛的用户群体覆盖。 …

深信服终端安全管理系统EDR版本升级过程

EDR当前版本为3.7.12,具体参考版本详情参数。需要升级到6.0.2R1版本,该版本更改了产品名称,叫做“统一端点安全管理系统aES” 当前版本详情 版本基础信息 软件版本:3.7.12.3829 病毒库版本:20240618174426 漏洞规则库&…

【安全边界】

1.安全边界是什么 安全边界是具有不同安全要求或需求的任意两个区域、子网或环境之间的交叉线。它存在于高安全性区域和低安全性区域之间,例如局域网(LAN)和互联网(Internet)之间。 2.为什么要建设安全边界 安全边界…

PHP入门教程5:会话管理和数据库操作

PHP入门教程5:会话管理和数据库操作 在前几篇文章中,我们学习了PHP的基础语法、控制结构、函数的使用、数组和字符串的操作,以及文件处理和表单处理。本文将重点介绍PHP中的会话管理和数据库操作,这是构建动态网站和Web应用程序的…

java.sql.Timestamp用法总结

java.sql.Timestamp用法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 概述 java.sql.Timestamp是Java中表示日期和时间的类,它继承自jav…

定制化物联网设备:开启智能生活新篇章

随着科技的进步,物联网(IoT)已成为我们日常生活和工作中不可或缺的一部分。从智能家居到工业自动化,物联网设备以其独特的功能和特性,极大地提高了我们的生活质量和工作效率。然而,在众多的物联网设备中&am…

Window常用的脚本有哪些?快来看看有哪些是你正在用的!(欢迎评论补充~)

前言 在日常开发中,如果能熟练掌握以下这些使用频率很高的脚本,那工作起来真的是手拿把攥,事半功倍,接下来给大家介绍一些我们日常使用率很高的一些脚本! 常用脚本(Batchfile & VBScript) 1.一键启动.bat 一次…

负利率(Negative Interest Rates)是什么?商业银行会对普通储户实施负利率吗?

负利率是什么? 中文版 负利率是指中央银行或金融机构对存款人收取存款费用,而不是支付利息。这意味着存款人在银行存钱不仅不能赚取利息,反而要支付费用。以下是对负利率的详细解释: 负利率的理解 定义: 负利率意味…

ServletResponse类及其使用方法介绍

在Java Servlet技术中,ServletResponse是一个接口,它定义了服务器响应客户端请求的API。这个接口提供了设置响应头、发送错误、以及管理响应内容的方法。以下是对ServletResponse接口中一些重要方法的介绍以及它们的使用示例。 ServletResponse接口概述…

每年1-1.2万人毕业,男女比例约3:1,测绘工程的就业率如何

测绘工程,一个让人闻风丧胆的理科专业,虎扑评分4.2: 干过测绘的,苦不苦只有大家心里知道,带大家来感受一下,兄弟们的精神状态都十分美妙: 测绘专业到底是什么情况? PS.测绘分为本科…

mongodb-java apispringboot整合mongodb

mongodb入门mongodb-java api的使用springboot整合mongodb评论 一 MongoDB 1.1 MongoDB简介 ​ MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ​ MongoDB是一个介于关系数据库和非关系数据库之间的产品&…

等保2.0对于物联网设备的漏洞管理还有哪些规定?

等保2.0针对物联网设备的漏洞管理,主要规定了以下几个方面: 1. 漏洞发现与识别:要求定期进行漏洞扫描和评估,利用专业的漏洞扫描工具和安全服务,及时发现物联网设备及其软件中的安全漏洞。这包括但不限于操作系统、应…

文献解读-流行病学-第十期|《SARS-CoV-2 德尔塔和奥密克戎合并感染和重组的证据》

关键词:基因组变异检测;全基因组测序;流行病学; 文献简介 标题(英文):Evidence for SARS-CoV-2 Delta and Omicron co-infections and recombination标题(中文)&#xf…

leetcode402场周赛——构成整天的下标对数目(javascript)

leetcode402场周赛——构成整天的下标对数目 原始题目链接&#xff1a; 402场周赛 题目描述 给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 整天 的下标对 i, j 的数目。 …

Leetcode 135. 分发糖果(问题分解)

Leetcode 135. 分发糖果 根据描述&#xff0c;可知更多糖果发生在相邻两个孩子的rating更高者中&#xff0c;对于一个孩子来说&#xff0c;左右两侧都视为相邻&#xff0c;即ratings[ i ] > ratings[ i-1 ] 或 ratings[ i ] > ratings[ i1 ]都会令糖果增加 由此则将问题…

手持风扇哪个品牌好?五大手持风扇品牌推荐!

随着炎热夏季的到来&#xff0c;手持风扇已成为人们出行的必备清凉神器。然而&#xff0c;面对市场上众多品牌的手持风扇&#xff0c;如何选择一款既时尚又高效的产品成为了许多消费者的难题。为了解决这个困扰&#xff0c;我们精心挑选了五大手持风扇品牌进行推荐。这些品牌不…

报表控件Stimulsoft 图表轴的日期时间步长模式

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…