前面介绍document的新增、删除、更新都处于相对常见和基础的说明,但是考虑到mongodb非结构化的特点,它的一些特性是我们的mysql不会遇到的,本文将针对这些特殊场景给出示例说明
- 在现有文档中,增加一个field
- 删除文档中的某个field
- 重命名文档的field
- 在文档的数组orObject中,添加/删除/更新数据
1. 增加field
我们知道修改文档的命令格式如下
1 | db.collection.update( |
当我们更新一个文档中,不存在的field,会怎样
1 | # 插入一条数据,然后设置一个不存在的field |
2. 重命名field
同样是借助update方法,但是我们用到的关键字为 $rename
1 | db.doc_demo.update({'author': '一灰灰blog'}, {$rename: {'skill': 'like'}}) |
请注意,当文档中不存在这个field,则不会有任何影响
3. 删除field
既然$set
可以新增一个不存在的field,那么是不是就可以用$unset
来删除一个已存在的field呢
1 | db.doc_demo.update({'author': '一灰灰blog'}, {$unset: {'title': 1}}) |
4. 数组元素修改
数组元素的修改删除增加,可以参考官方教程: MongoDB update-array Method
如果我们希望直接修改数组中的某个元素,可以借助之前查询的case
1 | # 修改数组中第0个元素 |
请注意,使用$
占位符的前途是,前面的查询条件可以限定数组元素
5. 数组元素新增
元素添加支持两种方式,一是addToSet
,一是push
$addToSet
- 确保没有重复的项添加到数组集合,对于已经存在的重复元素不受影响;
- 不能保证添加时元素的顺序
- 如果值是数组,则作为一个元素添加进去
- 可以通过
$each
实现添加多个元素到数组中
1 | # 不存在时,则添加,存在则忽略 |
$push
- 如果被更新的文档该数组不存在,那么$push将添加数组字段和值
- 如果字段不是数组,失败
- 如果值是数组,那么整个数组作为一个单个元素添加到数组
1 | # 不存在时,创建一个数组 |
6. 数组元素删除
$pop
删除第一个or最后一个
1 | # 删除最后一个 |
$pull
删除满足条件的数组元素
1 | # 将数组中添加几个元素 |
注意,$pull
后面跟上的可以理解为限定条件,查询教程篇的一些操作也是支持的(如比较查询等)
7. 内嵌文档操作
对于内嵌文档的操作,实际上普通的field的操作姿势没有什么区别,只是对于key加了一个xx.xx
的限定而已
1 | # 删除测试数据 |
II. 其他
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
3. 扫描关注
一灰灰blog