0

在我的 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上增加 1 。如果对象不在基础中,那么我想创建一个形式的对象bc

{_id: 13, a: 1, b: 0, c: 0}

如果a是我试图增加的领域。

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

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

这可以很好地更新我的a字段,但不会创建字段b并且c如果对象不存在。

4

1 回答 1

1

Upserts 可以与修饰符一起使用;当需要创建新文档时,修饰符将应用于选择器/条件对象。见这里。但是您确实需要在调用中将upsert参数设置为:trueupdate

db.somecollection.update({x: 1}, {$inc: {x: 1}}, true);

更新

要获得您正在寻找的行为:

db.somecollection.update({_id: 12}, {$inc: {a: 1, b: 0, c: 0}}, true);
于 2012-08-29T16:42:12.190 回答