MongoDB查找命令find,让数据返回称心如意

业务系统接入数据库后,每天都有大量的数据写入数据库。面对逐日增加的数据,开发人员或数据分析人员,该如何读取数据,怎样设置条件,从数据库中查询数据?

本文基于mongodb的官方文档,整理出find命令的基本用法。

构建测试集

向inventory集合中插入5条数据

复制代码
db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
])

查询所有数据

在find命令中,不指定过滤器或添加一个空的过滤器,即可查询集合中所有数据。

复制代码
db.inventory.find()
db.inventory.find({})

使用find查询时,返回结果是一个游标。使用mongosh或使用其他连接工具查询数据时,客户端默认通过该游标获取前面几条数据。用户需要移动游标来读取更多数据。

本测试集中只有5条数据,客户端自动移动游标获取全部数据。

等值查询

在查询过滤器中添加键值对,实现等值查询

复制代码
{<field1>: <value1>, ...}

如查询集合inventory中状态为D的数据

复制代码
db.inventory.find({status: "D"})

使用操作符指定查询条件

$in操作符

使用$in操作符,查询符合数组中元素的字段

复制代码
//查询status是A或D的字段
db.inventory.find({status: {$in: ['A', 'D']}})

使用逻辑操作符复合查询

复合查询,指多余一个过滤条件的查询。

$and操作符

通常情况下,可以隐式的使用$and操作符建立符合查询。查询出符合所有指定过滤条件的文档。

复制代码
db.inventory.find({status: "A", qty: {$lt: 30}})

如上面的查询语句,查询出符合status是A,并且符合qty大于30的文档

当显示的写出$and操作符时,查询语句变成下面的语句

复制代码
db.inventory.find({$and: [{status: "A"}, {qty: {$lt: 30}}]})

$or操作符

使用$or操作符,查询出至少满足一个过滤条件的文档。如下面的查询中,查询出满足status是A,或qty大于30的文档,或者查询出同时满足下面两个条件的文档。

复制代码
db.inventory.find({$or: [{status: "A"}, {qty: {$lt:30}}]})

and与or共用

and与or共用时,可以建立更复杂的查询。下面的语句,查询出status为A的文档,同时满足qty小于30或item以"p"字符开头的数据。

复制代码
db.inventory.find({status: 'A', $or: [{qty: {$lt: 30}},{item: /^p/}]})
相关推荐
科技小花5 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56616 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全7 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717218 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
小江的记录本8 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi8 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai9 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw09 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl200209259 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛1392462567310 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑