5.6.3 更新文档

5.6.3 更新文档

MongoDB使用save()和update()方法来更新集合中的文档。save()通过传入的文档来替换已有文档。update()方法用于更新通过查询条件找到的文档,格式如下:

参数说明:

查询条件是传入文档的部分信息,查询条件语句与find中的查询方式一致(见5.7节)。

整个文档或者修改器。当参数为整个文档时,传入的文档替换已有文档;当参数是修改器时,会根据修改器的种类做相应的改动。

upsert参数可选,表示如果不存在update的记录,是否写入新文档,true为写入,默认为false不写入。

multi参数可选,默认为false,表示只更新找到的第一条记录,如果这个参数为true,表示更新按条件查询到的所有记录。

writeConcern参数可选,表示抛出异常级别。作用是保障更新操作的可靠性。抛出异常的级别参数如下:

WriteConcern.NONE:没有异常抛出。

WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常(默认)。

WriteConcern.SAFE:抛出网络错误异常、服务器异常;并等待服务器完成写操作。

WriteConcern.MAJORITY:抛出网络错误异常、服务器异常;并等待一个主服务器完成写操作。

WriteConcern.FSYNC_SAFE:抛出网络错误异常、服务器异常;写操作等待服务器将数据刷新到磁盘。

WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器异常;写操作等待服务器提交到磁盘的日志文件。

WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器异常;等待至少两台主服务器完成写操作。

update()使用示例如图5-11所示。

图5-11 update()函数使用示例

上述更新语句表示查询name为mongo的文档,把它的age字段修改为“20”,company字段修改为“Google”。upsert值为“true”表示不存在该文档时写入新文档。之前name为mongo的文档只有_id和name两个字段,使用update修改时增加了age和company两个字段,可见update函数修改文档时可以修改文档的结构。