mongodb中的两个方法update与updateAndModify详解

作者:admin     字体:[增加 减小]    类型:原创
mongodb中的更新操作update与updateAndModify与mysql数据库中的函数update非常相似,但是mongodb在更新数据操作方面,比关系型数据库强大了很多。

下面介绍一下mongodb数据库中的两个方法,分别是update与updateAndModify。

db.COLLECTION_NAME.update({},{},true|false,true|false);
  • 第一个参数是查询选择器,与findOne的参数一样,相当于sql的where子句
  • 第二个参数是更新操作文件,由各种更新操作符和更新值构成,
  • 第三个参数是upsert。如果是true,表示如果没有符合查询选择器的文档,mongo将会综合第一第二个参数向集合插入一个新的文档。
  • 第四个参数是multi。true:更新匹配到的所有文档,false:更新匹配到的第一个文档,默认值

第三第四个参数也可以合并成一个:

db.COLLECTION_NAME.update({},{},{multi:true|false,upsert:true|false});

拥有类似事务特性的更新与查询操作 findAndModify()。

它是原子性的,会返回符合查询条件的更新后的文档。一次最多只更新一个文档,也就是条件query条件,且执行sort后的第一个文档。

db.COLLECTION_NAME.findAndModify({
query:{},
update:{},
remove:true|false,
new:true|false,
sort:{},
fields:{},
upsert:true|false});
  • query是查询选择器,与findOne的查询选择器相同
  • update是要更新的值,不能与remove同时出现
  • remove表示删除符合query条件的文档,不能与update同时出现
  • new为true:返回更新后的文档,false:返回更新前的,默认是false
  • sort:排序条件,与sort函数的参数一致。
  • fields:投影操作,与find*的第二个参数一致。
  • upsert:与update的upsert参数一样。

不论是update的第二个参数,还是findAndModify的update,在不指定更新操作符的情况下,将会用指定的新值替换旧值。比如,

use users
db.users.upate({name:"泡泡脚本网"},{name:"www.popjb.com"})

如果指定了更新操作符,就可以实现更复杂灵活的更新操作。可以通过更新操作符,增加或减少数值,针对数组类型的属性,做类似队列或栈的操作。单从这一点来说,mongo要比sql数据库强大的多了。