使用修饰符或在upsert查询中提供对象

时间:2012-08-29 16:23:40

标签: mongodb upsert

在我的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}

我的更新只是abc上的一个增量1。如果对象不在基础中,那么我想创建一个

形式的对象
{_id: 13, a: 1, b: 0, c: 0}

如果a是我试图增加的字段。

现在,如果我正确阅读了手册,我可以写

db.somecollection.update({_id: 12}, {$inc: {a: 1}}, true);

可以正常更新我的a字段,但如果该对象不存在,则不会创建字段bc

1 个答案:

答案 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);