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函数修改文档时可以修改文档的结构。