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的操作:
- $inc: 计数器方式修改文档的属性值。不能修改_id 的值。根据intValue 的正负做加减,如果property 不存在,则创建(强哦!)。适用于整数、长整数、双精度浮点数。
- $set : 设置具体属性的值。子文档(属性)用.相连,例如name.middle。
- $unsert: 移除一个属性(或子文档)。
- 如果<update>参数中的属性在匹配文档中不存在,则会在匹配文档中添加这些属性值;
- 如果<update>参数中的属性在匹配文档中存在,则匹配文档中的属性值被<update>参数中的新值取代;
- 数组更新:
下标方式:
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' } }
)
更新数组中第一个匹配查询参数的值
- 如果multi参数设置为true或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为常量了。