文档的更多查询 | 学习笔记

简介: 快速学习 文档的更多查询

开发者学堂课程【MongoDB精讲课程(上):文档的更多查询学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/726/detail/12960


文档的更多查询


内容介绍

一、正则的复杂条件查询

二、比较查询

三、包含查询

四、条件连接查询

 

一、正侧的复杂条件查询

首先来说正则,正则是一个比较强大的东西, MongoDB 支持 js 正则表达式的写法。

也就是通过正则表达式去实现模糊的查询,一个匹配的查询,正则怎么查询怎么匹配, MongoDB 都可以实现,因为它是完全支持 js 的写法的。

它怎么匹配在目的地查数据的时候都可以实现,因为它是完全支持这个 jS 的正则写法的,那它的写法是这样的,首先不管怎么写,肯定语法格式就是 db ,你的集合 comment 先翻译了一下,然后这里面再根据你的查询条件,比如说咱们查询这个包含开水,通过这个正则的写法,冒号这里就不能写字符串了,写字符串就是等于开水,是查不出来任何东西的,那我们要用这样的写法,

db.comment.find({content:/开水/})这样写的话就代表找的是只要包含这个开水的文档,都可以查出来。

1.png

MongoDB 的模糊查询是通过正则表达式的方式实现的。格式为:

db.collection.find({field:/正则表达式/})  

db.集合.find({字段:/正则表达式/})

提示:正则表达式是 js 的语法,直接量的写法。

例如,查询评论内容包含“开水”的所有文档,代码如下:

db.comment.find({content:/开水/})

如果要查询评论的内容中以“专家”开头的,代码如下:

db.comment.find({content:/^专家/})

无论正则多复杂 MongoDB 都可以查询

 

二、比较查询

比较查询比较简单,一般就是大于、小于、大于等于、小于等于、不等于这些。

那它的写法就是通过条件语句,首先你的字段名、冒号,冒号之后,再要跟上一个括号,括号之后写指令。比如说这个点赞数量大于700,那大于就用这个 gt 这个指令。

首先同样的 comment. find 这个语法,然后我们要找点赞数,就是 likenum ,这里就不直接写了,我们要用一个花括号包起来,然后要写指令,大于就是$ gt ,大于700我们不能直接写700,要用这个函数 NumberInt 包一下,这里面写上700,这时候查询的就是点赞数大于700的文档,其他的大于、小于、大于等于、小于等于、不等于都是同样的写法。

<,<=,>,>=这个操作符也是很常用的,格式如下:

db.集合名称.find({field:{$gt:value}})//大于:field>value

db.集合名称.find({field:{$lt:value}})//小于:field<value

db.集合名称.find({field:{$gte:value}})//大于等于:field>=value

db.集合名称.find({field:{$lte:value}})//小于等于:field<=value

db.集合名称.find({field:{$ne:value}})//不等于:field!=value

示例:查询评论点赞数量大于700的记录

db.comment.find({likenum:{$gt:NumberInt(700)}})

 

三、包含查询

包含使用 $in 操作符。

类比到其他的,包含查询的 in 就是 in 语法。一般情况下,我们写一条语句,你的字段 id in{1,2,3}  id 123的都可以查出来,这就是 in 语法。 MangoDB 也支持in 的写法。它的写法一样,通过字段,然后匹配指令,指令就是到了 in ,既然是 in ,后面肯定是跟的是一个数组。db.comment.find({userid:{$in:[1003]}})这时候1003的两条记录就可以查出来了。一般情况下我们不会直接用单条,数组可以跟多个数字。

示例:查询评论的集合中userid字段包含10031004的文档

db.comment.find({userid:{$in:[1003,1004]}})

不包含使用 $nin 操作符。

示例:查询评论集合中userid字段不包含10031004的文档

db.comment.find({userid:{$nin:[1003,1004]}})

 

四、条件连接查询

条件查询就是 and or 。并且和或的一个关系,这种写法稍微有些特殊,他就不是先写字段了,而是先把指令集写出来。

当然前面的 fiind 的查询还是一样的,那 find 之后先用花括号把指令集写出来。指令集写出来之后,后面跟的是一个数组,就是说要编写的这些条件。比如说我们现在要查询这个 likenum 大于等于700并且小于2000的文档,那我们至少是得有两个条件,那这个两个条件呢,都是写在and的这个数组里面的。

我们如果需要查询同时,满足两个以上条件,需要使用 $and 操作符将条件进行关联。(相当于 SQL and

格式为:

$and:[ {  },{ },{ } ]

示例:查询评论集合中 likenum 大于700并且小于2000的文档:

db.comment.find({$and:[{likeunm:NumberInt(700)}},{likenum:{$lt:NumberTnt(2000)}}]})

如果两个以上条件之间是或者的关系,我们使用操作符进行关联,与前面 and 的使用方式相同

格式为:

$or:[ { },{ },{  } ]

or的写法和and 完全一样,实际上就是把 and 改成 or 就可以了。里面的条件可以随意发挥。

比如说我们根据这个需求,我们查询的是这个 userid 1003并且点赞数小于1000,那我们就可以写了,我们先删除到最简的格式 db.comment.find{$

然后冒号这里是数组,数组里面跟上两个条件这就是一个完整的格式,那这里面我们分别去写条件。

第一个user ID1003,然后第二个条件是点赞数 likenum 小于1000,小于就是$lt ,我们要写规范一点, {likenum:{$lt:1000}}]}) 那这时候查询出来的就是 userid 1003点赞数小于1000

示例:

查询评论集合中的 userid 1003,或者点赞数小于1000的文档记录

db.comment.find({$or:[ {userid:1003},{likenum:{$lt:1000}}]})


五、常用命令小结

那么下面把之前学的这些常用的命令做个小结,首先我们基本的切换数据库,或者说创建数据库用的都是 use ,那 use 的时候,如果没有库我们就去创建,有库它实际上是切换。

插入数据库,用的就是 insert 语句,Insert 里面放的是 bdon 数据,bson 数据实际上类比的格式就是 json 的格式。所有的查询都是 db 然后集合名,然后 find 可以跟上你的条件,这个条件,可以是很复杂的也可以是很简单的,通过字段去直接匹配就可以了,那如果查询第一条记录,就是用 findOne ,如果是查询前几条条件用 limit 限制返回的行数,既然有 limit 我们要做分页,还有跳过 skip update 比较简单的用法就是第一个参数跟上条件,要更新哪些,那第二个更新的就是你修改后的数据,这就是 update

当然,如果这么写的话,是覆盖更新,如果只修改更新的话,需要加上一个$set 指令。自增列的写法也是比较简单,就把 update 条件 $inc 这个指令,然后跟上自身的字段,然后就是你要加一就写一。那 remove 比较简单,直接就也没有什么更新条件了,直接 remove 根据条件就可以,不需要修改后的数据,不像 update 需要麻烦一点,还需要一个修改后的数据。 remove 直接根据条件 remove 就行。

count 也是类似的,根据条件 count 或者直接 count 查询的是所有的。 count 出来就是统计所有当前的集合、所有的文档的数。模糊查询用正则。比较查询就是通过 $gt 指令集的一个写法。包含查询主要是  $in ,然后不包含就是 not in 也就是 $nin 。连接查询,咱们刚刚学的 and or 它的写法稍微有点特殊,就不是先写字段名了。

前面这几个查询,所有的查询条件都是先写字段名然后里面再去写复杂指令之类的,那么 and or ,就是且和或都是先写指令集,然后指令集里面再去写数组,数组里面再包含条件,就是稍微复杂一点,理解性的记忆也是非常简单的,因为 and 肯定是不知道不确定是哪一个条件,所以我们先把指令集写出来,然后里面用数组,再去包含多个条件,or 也是同理。

选择切换数据库:use articledb 插入数据:db.comment.insert({bson 数据}

查询所有数据:db.comment.find():

条件查询数据:db.comment.find{条件})条件可以是很复杂的,也可以是很简单的,通过字段直接匹配就可以了。

查询符合条件的第一条记录:db.comment.findOne({条件}

查询符合条件的前几条记录:db.comment.find({条件}.limit(条数)

查询符合条件的跳过的记录:db.comment.find({条件}.skip(条数)

修改数据:db.comment.update({条件}),{修改后的数据} update 比较简单的用法是,第一个参数跟上条件,要更新哪些条件,第二个要更新的就是修改后的数据。或 db.comment..update({条件}),{$set:{要修改部分的字段:数据}

修改数据并自增某字段值:db.comment.update({条件}),{$inc:{自增的字段:步进值}}

删除数据:db.comment.remove{条件}

统计查询:db.comment.count{条件}

模糊查询:db.comment.find{字段名:/正则表达式/}

条件比较运算db.comment.find{字段名:{$gt:}}

包含查询:db.comment.find({字段名:{$in:[1,2]}})db.comment.find({字段名:{$nin:[1,值2]}})

条件连接查询:db.comment.find({$and:[{条件1},{条件2}]})db.comment.find({$or:[{条件1},{条件2}]})

相关文章
|
10月前
|
开发框架 监控 JavaScript
解锁鸿蒙装饰器:应用、原理与优势全解析
ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。
315 2
|
10月前
|
人工智能 小程序 数据挖掘
2025年企业CRM选型指南:销售易、金蝶、纷享销客对比
销售易、金蝶和纷享销客是国内知名的CRM解决方案,各自具备独特优势。销售易功能全面,涵盖销售、客户、营销管理及AI赋能,适合中大型企业;金蝶与ERP无缝集成,财务管理强大,适合传统企业;纷享销客连接能力强,用户体验佳,性价比高,适合中小企业。本文从功能、体验、价格、评价及适用场景对比三者,助力企业选择合适的CRM系统,推动数字化转型。
|
运维 Kubernetes Cloud Native
深入理解云原生架构:从理论到实践
【10月更文挑战第38天】本文将引导读者深入探索云原生技术的核心概念,以及如何将这些概念应用于实际的软件开发和运维中。我们将从云原生的基本定义出发,逐步展开其背后的设计哲学、关键技术组件,并以一个具体的代码示例来演示云原生应用的构建过程。无论你是云原生技术的初学者,还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和实操指南。
|
存储 运维 监控
实时计算Flink版最佳实践测评
实时计算Flink版最佳实践测评
305 1
|
存储 canal 消息中间件
数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
1982 0
数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
深度解析:短信号码都有那些?他们之间有什么区别?
您的手机上常见的短信号码都有哪些呢,他们直接有什么区别呢,本文将带您一起学习了解哦。
深度解析:短信号码都有那些?他们之间有什么区别?
|
存储 弹性计算 运维
如何正确选择多云架构?
多云是指企业使用两个或更多的公有云 IaaS 供应商。广义来看,混合云也在其范畴。
1114 1
如何正确选择多云架构?
Linux 命令 `chown`:改变文件或目录的所有者
`chown` 是 Linux 中用于改变文件或目录所有者的命令。基本语法是 `chown [选项] 新所有者 文件或目录...`。常用选项包括 `-R` 递归更改、`-c` 显示详细信息和 `-v` 显示详细处理。示例:将 `example.txt` 所有者改为 `user2` 使用 `chown user2 example.txt`;更改目录 `mydir` 及其内容所有者为 `user2` 使用 `chown -R user2 mydir`。注意,通常只有 root 或当前所有者能更改所有者,且需谨慎操作以避免影响权限。
|
应用服务中间件 Shell nginx
win10 nginx设置开机启动 --亲测有效
win10 nginx设置开机启动 --亲测有效
309 0
|
SQL 机器学习/深度学习 数据可视化
产品至简,大道行宽——Quick BI接入通义千问大模型,引领数据消费新范式
产品至简,大道行宽——Quick BI接入通义千问大模型,引领数据消费新范式
1308 0