《MongoDB权威指南》读书笔记 第三章 创建、更新及删除文档
一、插入并保存文档
insert方法,如:db.foo.insert({'bar':'baz'})
此操作会给文档增加一个"_id"键
1、批量插入
多个文档的插入时,使用批量插入比单个一次次插入会快,因为一次批量插入只消耗一个TCP请求,避免许多零碎请求带来的开销,当单个文档发送至数据库时,会有一个头部信息,如果不用批量,则产生多个头部信息以便数据库处理。当前版本mongoDB最大消息长度为16MB,所以插入时会有所限制。
2、插入原理与作用
当行插入时,驱动程序会将数据转换成BSON形式送入数据库,数据库对BSON进行解析、验证(是否有"id",不超过4MB),如果要开启有效性验证,在启动数据库时用--objcheck选项.
3、删除文档
db.users.remove()
上述命令只删除users集合中的所有文档,索引会保留,删除数据是永久性的,不能撤销,也不能恢复。
4、更新文档
用update方法来修改文档
(1)文档替换,适用于模式结构变化较大的情况
(2)使用修改器
$inc:自增一个值,inc是increments的缩写,可接受正负增量
原文档{'uid':222, 'size':10}
db.b.update({'uid':222},{"$inc":{"size":-1}})
修改后{'uid':222, 'size':9}
$set:指定一个键并更新值,若键不存在则创建
原文档{'uid':222, 'size':10}
db.b.update({'uid':222},{"$inc":{"size":-1}})
修改后{'uid':222, 'size':-1}
更新内嵌文档:
原文档
{'id':123, 'height':{'size':10}}
修改 db.c.update({'id':123},{'$set':{'height.size':30}})
修改后{'id':123, 'height':{'size':30}}
$unset
用来删除键
数组修改器
$push
向数组类型在最末尾添加数组元素,没有键则创建,可以有重复元素
$pop
向数组末尾或开头弹出元素,指示参数为1(开头)和-1(末尾)
数组修改器还包括:$ne/$addToSet
upsert
一种特殊更新,在更新时没有些文档时则根据条件和文档在数据库中生成一份新文档.
save
在文档不存在时插入,存在时更新,只有一个参数文档