在我的upsert请求中,我想同时:
如果对象存在,则更新对象,也就是
db.somecollection.update({x: 1}, {$inc: {x: 1}});
提供一个新对象,如果它不存在,又名
db.somecollection.update({x: 1}, {whole: 0, new: 'yata', object: 42});
有办法吗?
问题是upsert似乎只有在你已经提供了一个对象而不是修饰符时才有效。
编辑:我会更具体。
我想更新表格的对象
{_id: 12, a: 123, b: 234, c: 345}
我的更新只是a
,b
或c
上的一个增量1。如果对象不在基础中,那么我想创建一个
{_id: 13, a: 1, b: 0, c: 0}
如果a
是我试图增加的字段。
现在,如果我正确阅读了手册,我可以写
db.somecollection.update({_id: 12}, {$inc: {a: 1}}, true);
可以正常更新我的a
字段,但如果该对象不存在,则不会创建字段b
和c
。
答案 0 :(得分:1)
Upserts可以使用修饰符;当需要创建新文档时,修饰符将应用于选择器/条件对象。见here。但您需要在upsert
来电中将true
参数设置为update
:
db.somecollection.update({x: 1}, {$inc: {x: 1}}, true);
<强>更新强>
要获得您正在寻找的行为:
db.somecollection.update({_id: 12}, {$inc: {a: 1, b: 0, c: 0}}, true);