MongoDB学习笔记(二)常用操作和操作符
本文最后更新于:December 3, 2021 pm
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。是一个面向文档存储的数据库,操作起来比较简单和容易。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
目录
数据库:loong
集合(表):to
字段:loongID、username、descr
1.更新文档
1.$set
db.collectionName.update({查询条件},{更新内容},{更新参数(可选)})
用于更新函数update()中。注意:IDEA中似乎update()函数已经不能使用了,需要用replaceOne替换update()。
例如:
1 |
|
我们知道,用此方法修改后,除了后面的:loongID:”100” 字段会保留外 。其他的字段数据都被清空了。因为他会完全根据你提供的修改字段数据进行修改,你提供什么,它就修改什么(即:之前没有的,它会自动创建)。你多它就多,你少他就少。所以,这种方法的使用比较麻烦,修改一处就需要把所有的字段数据都写出来,不管你改不改。你不写就表示不要了,就自动给你清空了。
这时候就可以用$set
来解决。它就可以用来实现只修改提供的字段数据,其他的不变。如果提供的数据没有,则会自动创建。
格式:
1 |
|
注意:在IDEA中,使用$set时,又使用replaceOne()是不行的,会报错,所以改用了updateOne()。
例子:
1 |
|
1.1 批量更新
上面的这种使用方法还有一个缺点,就是当查询结果有多条时,只会修改第一条。这时候就需要用到第三个参数了。使用 multi 参数实现批量更新,它是一个布尔值,默认为false。
注意:在IDEA中我使用了:updateOne()、replaceOne()、update()方法都不行。然后我在命令行中进行的。
数据库中,有两条loongID为101的。
1 |
|
这样就同时修改了两条数据的username字段。
2.$unset
用来删除键。
1 |
|
注意:后面那个1只是用来占位的而已,也可以写成其他的0、100等。这样写上,只是为了符合这种结构。
3.$inc
对文档的某个值为数字型的键进行增减操作。(只能是满足要求的数字类型)
1 |
|
4.$push
向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时,若键存在,则键值类型必须是数组;若键不存在,则会自动创建数组类型的键。
1 |
|
5.$pop
删除数据元素。1表示从数组的尾部删除,-1表示从数组的头部删除。
1 |
|
6.$pull
从数组中删除满足条件的元素。
1 |
|
7.$pullAll
从数组中删除满足条件的多个元素。
1 |
|
8.$rename
对键进行重新命名。
1 |
|
2.删除文档
2.1 deleteOne()函数
官方推荐删除文档方法。用来只删除满足条件的第一条文档。
1 |
|
2.2 deleteMany()函数
官方推荐删除文档方法。用来删除满足条件的所有数据。
1 |
|
2.3 删除集合中所有函数
remove()函数、deleteMany()函数(推荐)。
1 |
|
3.查询文档
3.1 find()函数
find({查询条件(可选)},{指定投影的键(可选)}) 。pretty()函数可以使用格式化的方式来显示所有文档。
1 |
|
3.2 findOne()函数
只返回满足条件的第一条数据。如果未做投影操作,该方法则自带格式化功能。如果不写查询条件,则只会返回所有数据中的第一条。
findOne({查询条件(可选)},{投影操作(可选)})。
1 |
|
3.3 模糊查询
使用//与^$实现模糊查询,注意使用模糊查询时查询条件不能放到双引号或单引号中。
示例:
- 包含
a
内容的。
1 |
|
- 以
a
开头的。
1 |
|
- 以
a
结尾的。
1 |
|
3.4 投影操作
3.4.1 find()函数投影操作
在find()函数中,我们可以指定投影键。
find({查询条件},{投影键名:1|0,投影键名:1|0,….}) ,其中,1表示显示,0表示不显示。其中,
_id
是默认显示的,若想不显示,则必须要指定为0。
1 |
|
3.4.2 findOne()函数投影操作
同find()函数一样,可以指定投影键。需要注意的是,这里的findOne()函数不再会格式化输出。
findOne({查询条件},{投影键名:1|0,投影键名:1|0}….)
1 |
|
4.条件操作符
用于两个表达式。例如:find({键:{操作符:条件}})或者findOne({键:{操作符:条件}})
4.1 大于($gt)
可以对数字或日期进行判断。
1 |
|
4.2 小于($lt)
可以对数字或日期进行判断。
1 |
|
4.3 大于等于($gte)
可以对数字或日期进行判断。
1 |
|
4.4 小于等于($lte)
可以对数字或日期进行判断。
1 |
|
4.5 等于($eq)
1 |
|
4.5 不等于($ne)
1 |
|
4.6 $and
用来表示多条件间的并且关系。
find({$and:[{条件一},{条件二},….]})
- 如果在查询中给定了多个查询条件,条件之间的关系默认为and关系。(同一个键)
1 |
|
这种方式只能针对同一个键。不同键之间的还需要使用$and
。
1 |
|
4.7 $or
find({$or:[{条件一},{条件二},….]})
使用方法同$and一样。
4.8 $type
来检索集合中匹配的数据类型,并返回结果。
1 |
|
5.Limit函数和Skip函数
5.1 Limit函数
用来指定数量的数据记录条数。
db.to.find.limit(count)
1 |
|
5.2 Skip函数
用来跳过指定数量的数据,即从哪一条数据开始读取。
db.to.find().skip(count) 。也可以和limit联合使用:db.to.find().limit(number).skip(count) 。调用的位置没有顺序,可以任意写。skip写在前面,limit写在后面可能会比较好理解一些。他们都表示:跳过几条数据,再输出几条。
6.排序
使用sort()
函数对查询到的文档进行排序,sort()函数可以通过参数指定排序的字段,并使用1(升序)和-1(降序)来指定排序的方式。
db.to.find().sort({排序键名:1})
1 |
|
本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/4031694772.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!