首先创建一个数据库:这里和一般的关系型数据库一样,都要建立一个属于自己的数据库空间.
注意 : MongoDB中如果你使用了不存在的对象,那么就等于你在创建这个对象哦
注意 : 创建完数据库后,如果查看是看不到的,因为如果不向数据库中添加数据,数据库存在在内存中,添加数据后,永久存在在磁盘中
创建一张表 : s1

集合(表)的增删改查
添加
插入数据有三种方法 : insert , insertOne , insertMany .
官方推荐使用 insertOne , insertMany .
1 . insert : 插入一条或者多条数据.(官方不推荐)

注意 : 插入多条数据的时候是 ([] {},{},{} ]),一个{} 代表一条数据 ,要放在列表中.
2 . insertOne : 插入一条数据

3 . insertMany : 插入多条数据

这就是我们向s1中插入的多条数据
查询
1 . find() : 无条件查询,将表中数据一次性返回多条数据
find({}) : 条件查询,会返回多条数据.

2 . findOne() : 无条件查询.默认返回表中的第一条数据
findOne({}) : 条件查询.默认返回一条,如果有多条则返回靠前的数据.

修改
1 . update : 跟距条件修改,官方不推荐

2 . updateOne : 根据条件修改一条数据,如果出现多条则修改最前的一条

根据 age=18为条件,修改name=kebi,出现了2条,结果只是修改了靠前的一条
3 . updateMany : 根据条件修改所有符合条件的内容.多条修改

注意 : $set 是update的关键字,表示我要设置 xx属性的值为 xxx,但是由于MongoDB的灵活性,没有我就创建,所以说,如果这条Documents没有 xx 属性,他就会自动创建一个 xx 属性并且赋值为 "xxx" .
删除
1 . remone({}) : 无条件删除数据,删除所有数据,清空.

2 . remove({"name":"meng"}) : 删除条件 name=meng 的所有数据

$关键字及修改器
$关键字
1 . 等于 : " : "

2 . 大于 : "$gt"

3 . 小于 : "$lt"

4 . 大于等于 : "$gte"
5 . 小于等于 : "$lte"
6 . 并列条件
修改器
顾名思义,修改器对应的就是 update,在之前我们使用update的时候就用过$set,在update中还有很多的 $关键字,我们把update中的 $关键字 称为 修改器.
1 . $inc :
相当于python中 变量 +/-= 1. 将查询结果加上/减去某个值,然后保存.

2 . $set : 强制修改,没有就自动增加一条

3 . $unset : 用来删除key(field)的

4 . $push :
它是用来对Array (list)数据类型进行 增加 新元素的,相当于我们大Python中 list.append() 方法,


5 . $pull :
有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素

得出了一个结论,只要满足条件,就会将Array中所有满足条件的数据全部清除掉
6 . $pop : 指定删除Array中的第一个 或者 最后一个元素
做个小例子: 删除"score" 等于 100 分 test_list 的最后一个元素

怎么删除第一个呢?

{$pop:{"test_list" : -1}} -1 代表最前面, 1 代表最后边 (这和我们大Python正好相反) 记住哦
$ 代指符
在MongoDB中有一个非常神奇的符号 "$"
"$" 在 update 中 加上关键字 就 变成了 修改器
其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符
首先看个例子: 还是这个Collection
![]()
现在把 "score": 100 的 test_list 里面的 2 改为 9

{$set :{"test_list.0" : 9}} 这样就是对应 Array 中的下标进行修改了 "test_list.下标"
问题来了 如果 是 一个很长很长很长的 Array 你要查找其中一个值,把这个值修改一下怎么整呢?

神奇不神奇?
$ 字符 在语句中代表了什么呢? 下标,位置
解释一下: 首先我们查询一下db.Oldboy.findOne({"score":100,"test_list":3}) 返回 给我们满足条件的数据对吧

那么 如果 我们 使用 update的话, 满足条件的数据下标位置就会传递到 $ 字符中,在我们更新操作的时候就相当于 对这个位置 的元素进行操作
我们已经学过MongoDB的 find() 查询功能了,在关系型数据库中的选取(limit),排序(sort) MongoDB中同样有,而且使用起来更是简单
首先我们看下添加几条Document进来

现在有四条Document 根据它们, 对 Limit Skip Sort 分别展开学习 最后来一个 大杂烩
1. Limit 选取 : 我要从这些 Document 中取出多少个
做个小例子 : 我只要 2 条 Document

结果是很明显的
但是我还是要解释一下 : limit(2) 就是选取两条Document, 从整个Collection的第一条 Document 开始选取两条
2.Skip 跳过 : 我要跳过多少个Document
做个小例子 : 我要跳过前两个 Document 直接从第三个Document 开始

解释一下 : skip(2) 就是跳过两条Document, 从整个Collection 的第一条 Document 开始跳,往后跳两条
另一个例子 : 跳过第一条 直接从 第二条 开始

3.Limit + Skip : 从这儿到那儿 的 选取
就是刚才的问题,一个小例子 : 我只想要第二条和第三条怎么处理呢

跳过第一条Document 从第二条开始选取两条 Document
别着急,还有另一种写法

两种写法完全得到的结果完全一样但是国际惯例的解释却不同
选取两条Document 但是要 跳过 第一条Document 从 第二条 开始 选取
4. Sort 排序 : 将结果按照关键字排序
做个小例子 : 将find出来的Document 按照 price 进行 升序 | 降序 排列


按照 price 字段进行升序 , 1 为升序 , -1 为降序
5. Limit + Skip + Sort 混搭来一把
一个例子 : 选取第二条第三条 并 按照 price 进行 升序排列


问题出现了, 按道理不应该是 9800 然后 19800 吗?
知识点来喽
重点 : Sort + Skip + Limit 是有执行优先级的 他们的界别分别是 优先 Sort 其次 Skip 最后 Limt
Skip + Limit 的优先级 也是先 Skip 再 Limit
sort > skip > limit
首先我们要先了解一下MongoDB中有什么样的数据类型:
Object ID :Documents 自生成的 _id
String: 字符串,必须是utf-8
Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
Double:浮点数 (没有float类型,所有小数都是Double)
Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
Null:空数据类型 , 一个特殊的概念,None Null
Timestamp:时间戳
Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
1 . Object ID :

这是MongoDB生成的类似关系型DB表主键的唯一key,具体由24个字节组成:
0-8字节是时间戳,
9-14字节的机器标识符,表示MongoDB实例所在机器的不同;
15-18字节的进程id,表示相同机器的不同MongoDB进程。
19-24字节是计数器
2.String :

UTF-8字符串,记住是UTF-8字符串
3.Boolean :
![]()
true or false 这里首字母是小写的
4.Integer :
![]()
整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
5.Double :
![]()
浮点数 (MongoDB中没有float类型,所有小数都是Double)
6.Arrays :

7 . Object : 相当于python中的 字典
![]()
8 . Null
![]()
空数据类型 , 一个特殊的概念,None Null
9 . Timestamp : 时间戳
![]()
10 . Date :
![]()
存储当前日期或时间格式 (我们一般很少使用这个Date类型,因为时间戳可以秒杀一切时间类型)
练习题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/148380.html