2012-09-09 71 views
1

我想使用強類型對象執行更新。例如,MongoDB C# - 使用自定義強類型對象不允許更新?

public void setAppointmentPrefs(string UserName, IEnumerable<AppointmentInfo> info) 
{ 
    var query = new QueryDocument {{ "ProviderId", UserName}}; 
    var update = Update.Set("Prefs",prefs); // prefs.toList() gives same error 
    // providerprefs initialized in constructor 
    providerprefs.Update(query, update); 
} 

我收到一個編譯器錯誤說:Error 14 The best overloaded method match for 'MongoDB.Driver.Builders.Update.Set(string, MongoDB.Bson.BsonValue)' has some invalid arguments

顯然蒙戈驅動程序不會讓我更新基於我自己的對象(無論是否爲IEnumerable或prefs.toList()),這似乎與它允許我使用自定義對象插入或查詢的方式形成鮮明對比。當然,我錯過了一些顯而易見的東西,可以讓我避免反序列化,弱打字然後創建一個通用的BsonDocument! TIA。

回答

1

您可以根據自己的類型進行更新!您是否嘗試過使用類型化查詢和更新構建器?

嘗試這樣:

var query = Query<AppointmentInfo>.EQ(i => i.ProviderId, userName); 
var update = Update<AppointmentInfo>.Set(i => i.Prefs, info.Prefs); 

不知道我得到的類型和一切從你的部分代碼編寫,但應該給你的總體思路。

讓我知道你是否還有其他問題。

1

我知道這已被回答,但我對其中一個人並沒有完全理解羅伯茨的回答。

我所做的就是所謂的「ToBsonDocument()」方法,它除了對象作爲參數

所以:

customObject.ToBsonDocument() 

如果你有對象的數組一個文檔中:

var query = Query.EQ("_id", ObjectId.Parse(id.ToString())); 
var update = Update.Push("ArrayOfObjects", customObject.ToBsonDocument()); 
collection.Update(query, update); 
相關問題