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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 快速学习 文档的更多查询

开发者学堂课程【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}]})

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
存储 SQL 缓存
|
存储 JSON 自然语言处理
|
存储 SQL 缓存
四.全文检索ElasticSearch经典入门-字符串查询&批量查询&DSL查询过滤&乐观锁
四.全文检索ElasticSearch经典入门-字符串查询&批量查询&DSL查询过滤&乐观锁
|
存储 JSON 自然语言处理
三.全文检索ElasticSearch经典入门-索引CRUD&分词器&文档映射&文档CRUD
三.全文检索ElasticSearch经典入门-索引CRUD&分词器&文档映射&文档CRUD
|
存储 前端开发 Java
ElasticSearch快速入门之创建索引库、创建映射、创建文档、搜索文档
ElasticSearch快速入门之创建索引库、创建映射、创建文档、搜索文档
374 0
|
存储 JSON NoSQL
文档的插入和查询 | 学习笔记
快速学习 文档的插入和查询
132 0
文档的插入和查询 | 学习笔记
|
自然语言处理 数据库 开发者
索引和搜索流程简介|学习笔记
快速学习索引和搜索流程简介
136 0
索引和搜索流程简介|学习笔记
|
NoSQL MongoDB 开发者
文档的更新操作 | 学习笔记
快速学习 文档的更新操作
111 0
文档的更新操作 | 学习笔记
|
NoSQL MongoDB 开发者
索引的使用 涵盖的查询 | 学习笔记
快速学习 索引的使用 涵盖的查询
索引的使用 涵盖的查询 | 学习笔记
|
NoSQL MongoDB 开发者
文档的分页查询 | 学习笔记
快速学习 文档的分页查询
文档的分页查询 | 学习笔记