MongoDB学习笔记(三)——CRUD之 更新


7、如何进行更新操作?

 

在Mongodb中可以通过下面2种方式更新数据:

  • save方法
  • update方法

7.1 update方法。 update方法是更新文档最常用的方法。update方法一般用来更新一个文档,但也可以使用multi选项一次更新多个文档。update方法可以更新一个文档的部分属性,也可以替换整个文档。

 

update方法的语法格式是:db.collections.update(<query>,<update>,<options>);


对应与SQL中的UPDATE语句,update方法的<query>参数相当于WHERE子句;<update>参数相当于SET子句;默认更新一个文档相当于UPDATE LIMIT 1;使用multi参数相当于UPDATE.

 

update的操作:

  1. $inc: 计数器方式修改文档的属性值。不能修改_id 的值。根据intValue 的正负做加减,如果property 不存在,则创建(强哦!)。适用于整数、长整数、双精度浮点数。
  2. $set : 设置具体属性的值。子文档(属性)用.相连,例如name.middle。
  3. $unsert: 移除一个属性(或子文档)。
  • 如果<update>参数中的属性在匹配文档中不存在,则会在匹配文档中添加这些属性值;
  • 如果<update>参数中的属性在匹配文档中存在,则匹配文档中的属性值被<update>参数中的新值取代;
  1. 数组更新:

  下标方式:

db.bios.update(

{ _id: 1 },

{ $set: { 'contribs.1': 'ALGOL 58' } }

);

更新contribs的第二个(数组下标为1)元素的值。


$第一个匹配:

db.bios.update(

{ _id: 3, 'contribs': 'compiler' },

{ $set: { 'contribs.$': 'A compiler' } }

)

更新数组中第一个匹配查询参数的值。


.操作的深入匹配

db.bios.update(

{ _id: 6, 'awards.by': 'ACM' } ,

{ $set: { 'awards.$.by': 'Association for Computing Machinery' } }

)

更新数组中第一个匹配查询参数的值

  1. 如果multi参数设置为true或1,则更新所有匹配到的值:
  1. 如果upsert参数设置为true或1,如果<search>参数没有匹配到值,则插入<update>参数的值。

注意:替换更新!如果<search>参数查询到多个值,而又设置了multi选项,那么就要特别注意,更新时的<update>参数不能包含_id属性。这是因为,更新多个记录时,由于_id 不唯一,将会导致更新出错。因此,<search>参数 中最好使用_id 匹配。

 

其实这种更新时,可以参考关系数据库的这种使用方式:

 

persistentDoc = db.list.findOne({“_id”,123});

persistentDoc.someValue = newValue;

persistentDoc.someValue2 = newValue2;

db.list.update({“_id”,123}, persistentDoc);

 

这里和SQL也是相通的。当更新一个记录时,可以更新_id,但更新多个记录时,就不能更新id为常量了。

 

猜你喜欢

转载自zhiyongv.iteye.com/blog/1744719