MongoDB 查询文档(1)

一、查询语法

本篇我们主要讲解在集合或视图中查询文档,首先说明一下查询的语法:

db.collection.find(query, projection, options)

此定义可以从集合或者视图中查找文档并返回一个游标(cursor);

参数

query: 此选项可选,用于指定查询过滤器,如果要查询集合中的所有文档,可省略此参数或者传递空文档{}

projection: 此选项可选,用于指定在文档中返回的字段,如果要返回匹配文档中的所有字段,可省略此参数。

options:此选项可选,用于指定查询的其他选项。可以用于修改查询行为以及返回结果的方法。

返回

一个指向符合查询条件的文档的游标。当 find() 方法"返回文档",该方法实际上是返回一个指向文档的游标。

二、Query选择器

1、比较筛选

1.1 相等($eq)

语法:{ <field>: { $eq: <value> } }

该表达式等效于:

{ <field>: <value> }

例子:

查询集合test所有的文档:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

下面我们查询年龄=20的成员:

db.test.find({"age": { $eq: 20 }});

此查询等效于:

db.test.find({"age": 20});

这两个查询的结果一致,如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }

1.2 不相等($ne)

语法:{ <field>: { $ne: <value> } }

例子:

下面我们查询年龄!=20的成员:

db.test.find({"age": { $ne: 20 }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

1.3 大于($gt)

语法:{ <field>: { $gt: <value> } }

例子:

下面我们查询年龄>22的成员:

db.test.find({"age": { $gt: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

1.4 大于等于($gte)

语法:{ <field>: { $gte: <value> } }

例子:

下面我们查询年龄>=22的成员:

db.test.find({"age": { $gte: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

1.5 小于($lt)

语法:{ <field>: { $lt: <value> } }

例子:

下面我们查询年龄<22的成员:

db.test.find({"age": { $lt: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }

1.6 小于等于($lte)

语法:{ <field>: { $lte: <value> } }

例子:

下面我们查询年龄<=22的成员:

db.test.find({"age": { $lte: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }

1.7 与数组中的任一值匹配($in)

语法:{ <field>: { $in: [ <value1>, <value2>, ... <valueN>] } }

例子:

下面我们查询年龄等于20或者22的成员:

db.test.find({"age": { $in: [ 20, 22 ] }});

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }

1.8 与数组中的值均不匹配($nin)

语法:{ <field>: { $nin: [ <value1>, <value2>, ... <valueN>] } }

例子:

下面我们查询年龄不等于20,22的成员:

db.test.find({"age": { $nin: [ 20, 22 ] }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

2、逻辑筛选

2.1 并且($and)

语法:{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }

查询满足所有表达式的文档。

例子:

下面我们查询年龄大于21并且小于24的成员:

db.test.find(
    { 
        $and: [ 
            {"age": {$lt: 24}}, 
            {"age": {$gt: 21}} 
        ] 
    }
);

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }

2.2 或者($or)

语法:{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

查询至少满足一个表达式的文档

例子:

下面我们查询年龄小于21或者大于24的成员:

db.test.find(
    { 
        $or: [ 
            {"age": {$gt: 24}}, 
            {"age": {$lt: 21}} 
        ] 
    }
);

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

2.3 非($not)

语法:{ <field>: { $not: { <operator-expression> } } }

查询不满足表达式的文档

例子:

下面我们查询年龄不等于22的成员:

db.test.find({ "age": { $not: { $eq: 22 }} });

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

2.4 或非($nor)

语法:{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }

查询不满足所有表达式的文档

例子:

下面我们查询“年龄不等于22并且姓名不等于张三”的成员:

db.test.find(
    { 
        $nor: [ 
            {"age": {$eq: 22}}, 
            {"name": "张三"} 
        ] 
    }
);

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈JVM(五):虚拟机栈帧结构

上一篇&#xff1a; 浅谈JVM(一)&#xff1a;Class文件解析 浅谈JVM(二)&#xff1a;类加载机制 浅谈JVM(三)&#xff1a;类加载器和双亲委派 浅谈JVM(四)&#xff1a;运行时数据区 5.虚拟机栈帧结构 ​ 方法是程序执行的最小单元&#xff0c;每个方法被执行时都会创建一个栈帧…

关于CH32F203程序下载方式说明

关于CH32F203程序下载方式说明&#x1f389;好久没有写有关wch单片机的相关内容了&#xff0c;具体焊接完2块CH32F203&#xff0c;发现烧写程序遇到了各种囧事。 &#x1f4d3;CH32F203程序下载方式 &#x1f528;通过串口下载。接口为PA9和PA10不知道是不是各厂商之间默契的规…

Linux VIM编辑器常用指令

普通模式的基本指令 按键作用yy 复制一行 通常会与p一起使用p将复制的内容写出 数字yy 从当前行往下数数字行进行复制y^复制当前行的起始位到光标的前一位y$复制光标当前位置到行末尾yw复制光标所在的位置之后&#xff08;包括光标&#xff09;的&#xff08;不完整&#xff0…

ffmpeg关于视频前几秒黑屏的问题解决

关于音频播放器视频前两秒黑屏的解决&#xff0c;及QtAV和ffmpeg的环境搭建&#xff08;软件包可以找李青璠提供&#xff0c;也可以自己下&#xff09;首先我们可以参考下面两个博客进行ffmpeg的搭建&#xff0c;第一个博客的问题可以在第二个博客里寻求方法解决。其中第一个博…

多线程的锁策略

文章目录前言一.乐观锁与悲观锁二.轻量级锁和重量锁三.自旋锁和挂起等待锁四.互斥锁和读写锁五.不可重入锁和可重入锁六.公平锁和非公平锁前言 其实这里指的锁策略&#xff0c;不只只是线程才存在的。也不只是针对Java的&#xff0c;我现在就即将介绍常见的锁策略。 一.乐观锁…

Python 自动化指南(繁琐工作自动化)第二版:八、输入验证

原文&#xff1a;https://automatetheboringstuff.com/2e/chapter8/ 输入验证代码检查用户输入的值&#xff0c;比如来自input()函数的文本&#xff0c;格式是否正确。例如&#xff0c;如果您希望用户输入他们的年龄&#xff0c;您的代码不应该接受无意义的答案&#xff0c;如负…

中间表示- 三地址码

使用三地址码的编译器结构 三地址码的基本思想 &#xff08;1&#xff09;给每个中间变量和计算结果命名&#xff0c;没有复合表达式 &#xff08;2&#xff09;只有最基本的控制流&#xff0c;没有各种控制结构&#xff08;if、do、while、for等等&#xff09;&#xff0c;只…

2 新建工程步骤

2 新建工程步骤 0.建立工程文件夹 选择一个程序储存文件&#xff0c;新建一个2-1 STM32工程模板文件夹&#xff0c;在2-1 STM32工程模板文件夹新建一个Start&#xff0c;User,Library文件夹 1.Keil中新建工程&#xff0c;选择型号 打开keil5&#xff0c;project->new pr…

045:cesium加载OpenStreetMap地图

第045个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载加载OpenStreetMap地图。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 注意OpenStreetMap国内加载有问题,需要曲线救图。 文章目录 示例效果配置方式示例源代码(共79行)相关API参考:…

询问ChatGPT的高质量答案艺术——提示工程指南(更新中……)

目录前言一、提示工程简介二、提示技巧2-1、生成法律文件2-2、添加提示技巧三、角色扮演3-1、智能手机产品描述3-2、添加角色扮演四、标准提示4-1、写一篇有关于新智能手机的评论4-2、添加标准提示、角色提示、种子词提示等等五、示例很少、或者没有示例5-1、生成一个手机配置六…

什么是服务架构?微服务架构的优势又是什么?

文章目录1.1 单体架构1.2 微服务架构1.3 单体架构和微服务架构的区分1.4 两种服务架构的优劣点1.4.1 单体架构1.4.2 微服务架构1.5 总结1.1 单体架构 单体架构&#xff08;Monolithic Architecture&#xff09;是一种传统的应用程序架构模式&#xff0c;它指的是将一个应用程序…

聚会Party

前言 加油 原文 聚会常用会话 ❶ He spun his partner quickly. 他令他的舞伴快速旋转起来。 ❷ She danced without music. 她跳了没有伴乐的舞蹈。 ❸ The attendants of the ball are very polite. 舞会的服务员非常有礼貌。 ❶ Happy birthday to you! 祝你生日快乐!…

剪枝与重参第四课:NVIDIA的2:4剪枝方案

目录NVIDIA的2:4 pattern稀疏方案前言1.稀疏性的研究现状2.图解nvidia2-4稀疏方案3.训练策略4.手写复现4.1 大体框架4.2 ASP类的实现4.3 mask的实现4.4 模型初始化4.5 Layer嵌入稀疏特性4.6 优化器初始化4.7 拓展-dynamic function assignment4.8 完整示例代码总结NVIDIA的2:4 …

做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)

前言&#xff1a;之前工作中做过两个功能&#xff0c;就是之前写的这两篇博客&#xff0c;最近几天有个想法&#xff0c;给它做成一个springboot的start启动器&#xff0c;直接引入依赖&#xff0c;写好配置就能用了 springboot使用自定义注解实现接口参数解密&#xff0c;普通…

4.5--计算机网络之基础篇--1.模型分层--(复习+深入)---好好沉淀,加油呀

1.TCP/IP模型的分层 1.1.为什么要有 TCP/IP 网络模型&#xff1f; 对于同一台设备上的进程间通信&#xff0c;有很多种方式&#xff0c;比如有管道、消息队列、共享内存、信号等方式&#xff1b; 而对于不同设备上的进程间通信&#xff0c;就需要网络通信&#xff0c;而设备是…

Elasticsearch:索引状态是红色还是黄色?为什么?

在我之前文章 “Elasticsearch&#xff1a;如何调试集群状态 - 定位错误信息” 中&#xff0c;我有详细介绍如何调试集群状态。在今天的文章中&#xff0c;我将详细介绍如何故障排除和修复索引状态。 Elasticsearch 是一个伟大而强大的系统&#xff0c;特别是创建一个可扩展性极…

51单片机-LED篇

目录准备工作点亮一个LED灯写程序烧录LED闪烁延时代码Delay500ms烧录LED流水灯代码对LED流水灯代码进行优化&#xff0c;增加复用性延时代码代码准备工作 使用到的单片机是普中51单片机 使用到的软件是Keil uVision5和stc-isp 点亮一个LED灯 写程序 首先通过Keil uVision5…

多个硬盘挂载到同一个目录

同一目录无法重复挂载&#xff0c;后挂载的会覆盖之前挂载的磁盘。但是现在需要将4块磁盘并行挂载&#xff0c;该如何操作呢&#xff1f; 将2块磁盘合并到一个逻辑卷 进行挂载。 基本知识 基本概念PV(Physical Volume)- 物理卷物理卷在逻辑卷管理中处于最底层&#xff0c;它可…

MyBatisPlus-DML编程控制

MyBatisPlus-DML编程控制4&#xff0c;DML编程控制4.1 id生成策略控制知识点1&#xff1a;TableId4.1.1 环境构建4.1.2 代码演示AUTO策略步骤1:设置生成策略为AUTO步骤2:删除测试数据并修改自增值步骤3:运行新增方法INPUT策略步骤1:设置生成策略为INPUT步骤2:添加数据手动设置I…

Muduo库源码剖析(八)——TcpServer类

TcpServer类 要点 TcpServer类的主要作用是&#xff0c;管理整个服务器&#xff0c;做如下的一些操作&#xff1a; 管理accept(2) 获得的 TcpConnectionTcpServer是供用户直接使用的&#xff0c;生命期由用户控制设置 mainLoop,并利用 mainLoop 进行新连接的管理初始化TcpSe…
最新文章