MongoDB学习笔记-创建、更新及删除文档

插入并保存文档

插入是向MongoDB中添加数据的基本方法。

1
>db.foo.insert({'bar':'baz'})

该操作会给文档增加一个”_id”键(如果原来没有),然后将其保存到MongoDB中。

当执行插入的时候,使用的驱动程序会将数据转换成BSON的形式,然后将其送入数据库。数据库解析BSON,检验是否包含’_id’键,并且文档不超过4MB。

删除文档

1
>db.users.remove()

上述命令会删除users集合中所有的文档。但不会删除集合本身,原有的索引也会保留。

remove函数可以接受一个查询文档作为可选参数。给定这个参数后,只有符合条件的文档才会被删除。删除数据是永久性的,不能撤销,也不能恢复。

删除速度

删除文档会很快,但是要清除整个集合,直接删除集合(然后重建索引)会更快。

更新文档

文档存入数据库以后,使用update方法修改。update有两个参数,一个是查询文档,用来找出需要更新的文档。另一个是修改器文档,描述对文档的哪些做更改。
更新操作是原子的,若是两个更新同时发生,先到达服务器的先执行。

1
2
3
4
5
6
7
8
9
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

其中:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

$set

$set 用来指定一个键的值,如果该键不存在就创建。$unset可以将键完全删除。

1
2
3
db.getCollection('news').insert({title:'MongoDB学习','id': NumberInt(3), author: '2008'})

db.getCollection('news').update({id: 3},{$set:{author: 'cqu2008', type: 'datebase'}})

$set可以修改键的数据类型。
一定要使用以$开头的修改器来修改键值对。

$inc

$inc修改器用来增加已有键的值,或者在键不存在时创建一个键。

1
2
3
db.getCollection('news').update({id: 3},{$inc:{score: 50}})

db.getCollection('news').update({id:3},{$inc:{score: 100}})

upsert

设置update的第三个参数,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

更新多个文档

设置update的第四个参数,默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。