MongoDB 查询文档(1)

news/2024/11/15 4:02:52/

一、查询语法

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

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.ppmy.cn/news/39800.html

相关文章

局域网(LAN),广域网(WAN)和互联网

网络异同 局域网&#xff08;LAN&#xff09;&#xff0c;广域网&#xff08;WAN&#xff09;和互联网是计算机网络的三种类型&#xff0c;它们之间有以下的区别和相同点&#xff1a; 相同点&#xff1a; 它们都是计算机网络的类型。 它们都可以让计算机之间进行数据交换和通…

Java IO常用操作详解(代码示例)

概览 Java I/O操作指的是数据的输入/输出操作。 Java的I/O操作类在java.io包中&#xff0c;主要分以下几种&#xff1a; 基于字节操作的I/O接口&#xff1a; InputStream和OutputStream基于字符操作的I/O接口&#xff1a; Writer和Reader基于磁盘操作的I/O接口&#xff1a; …

【多线程与高并发(锁)】1、锁的概念、分类和状态

1、锁的概念 java当中的锁、是在多线程环境下为保证共享资源健康、线程安全的一种手段。 线程操作某个共享资源之前&#xff0c;先对资源加一层锁&#xff0c;保证操作期间没有其他线程访问资源&#xff0c;当操作完成后&#xff0c;再释放锁。 2、锁的分类 Java中的锁按照…

I2C协议

目录 I2C协议 E2PROM AT24C02 I2C协议 假设主设备想要向从设备发送数据&#xff1a; 1. 主发送器发送START条件并寻址从接收器 2. 主发送器将数据发送到从接收器 3. 主发送器以STOP条件终止传输 如果主设备想要从从设备接收/读取数据&#xff1a; 1. 主发送器发送START条件并…

vue elementUI select下拉框设置默认值(赋值)失败

vue elementUI select下拉框设置默认值 要为select下拉框设定默认值&#xff0c;只需要把 v-model 绑定的值和你想要选中 option 的 value 值设置一样即可。 下面上代码&#xff1a; html部分代码&#xff1a; <el-select v-model"valuetype" change"ch…

前端中 try-catch 捕获不到哪些异常和常见错误

在开发过程中&#xff0c;我们的目标是 0error&#xff0c;0warning。 但有很多因素并不是我们可控的&#xff0c;为了避免某块代码的错误&#xff0c;影响到其他模块或者整体代码的运行&#xff0c;我们经常会使用try-catch模块来主动捕获一些异常或者错误。 比如我们在获取…

SpringBoot 使用Prometheus采集自定义指标数据

一、我们需要什么指标 对于DDD、TDD等&#xff0c;大家比较熟悉了&#xff0c;但是对于MDD可能就比较陌生了。MDD是Metrics-Driven Development的缩写&#xff0c;主张开发过程由指标驱动&#xff0c;通过实用指标来驱动快速、精确和细粒度的软件迭代。MDD可使所有可以测量的东…

ChatGPT 与未来软件开发的关系

在过去几年中&#xff0c;自然语言处理 (NLP) 取得了重大进展&#xff0c;并为软件开发开辟了新的可能性。最令人印象深刻的 NLP 应用之一是聊天机器人的开发&#xff0c;它能够通过自然语言与用户交流。ChatGPT 就是这样一种聊天机器人&#xff0c;这是一种由 OpenAI 开发的大…