使用c#驱动程序部分mongodb upsert?

时间:2011-09-23 18:45:17

标签: mongodb mongodb-.net-driver

Mongo版本1.8.2。

假设我有一个类

public class Acc
{
    public int _id { get; set; } 
    public int? Foo { get; set; } 
    public int? Bar{ get; set; }
}

Acc a = new Acc
{ 
    _id = 1,
    Foo = 3
};

我想致电

myCollection.Save(a), 

这样

  • 如果它不存在,则插入(目前为止容易)
  • 如果确实存在,Foo会更新,但是,但Bar仍然保留当前的状态(可能是非空的......)

如何实现此部分upsert?

非常感谢。

1 个答案:

答案 0 :(得分:3)

通过2次连续更新很容易做到:

myCollection.Insert(a,SafeMode.False);
myCollection.Update(Query.EQ("_id",a._id), Update.Set("Foo",a.Foo))

您必须使用SafeMode.False来确保如果集合中存在,则插入不会引发异常。

首先你会认为这些操作的顺序很重要,但事实并非如此:如果先执行2,无论结果如何,1都会默默地失败。

但是我不知道如何使用save方法来执行此直接操作。