2011-09-23 63 views
1

Mongo版本1.8.2。部分使用c#驅動程序的mongodb upsert?

假設我有一個像

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?

非常感謝。

回答

3

這將是很容易與連續2個更新做到這一點:你必須使用SafeMode.False確保如果一個集合中存在,刀片將不會產生異常

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

起初,你會認爲這些操作的順序很重要,但它不是:如果2先執行,無論結果如何,1都會默默地失敗。

但是我不知道如何使用save方法來做這個direclty。