2012-01-07 53 views
0

我想製作一個通用方法來從json數據中對文檔進行部分更新。 json數據包含正在更新的POCO字段的一個子集。我有這樣的:MongoDb:如何使用官方C#驅動程序從json數據進行部分更新

public static void Update(MongoCollection collection, ObjectId id, string jsonData) { 
     // assume jsonData does not contain the id field. 
     var bsonDoc = BsonSerializer.Deserialize<BsonDocument>(jsonData); 
     IMongoUpdate updateDoc = new UpdateDocument("$set", bsonDoc); 
     collection.Update(Query.EQ("_id",id), updateDoc); 
    } 

這幾乎工作,但我的問題是,有型的ObjectId字段反序列化字符串,因爲這是他們如何在JSON表示。 (它們已經在客戶端的JavaScript JSON2庫中進行了序列化)。

所以我的問題是:

1)什麼是作一般性的部分更新方法使用JSON數據的工作與官方C#驅動程序的最佳方式? 2)如何在使用BsonSerializer時將poco字段正確反序列化爲正確的類型而不僅僅是字符串?

+0

好了,不能前2小時回答我的問題,所以這裏是爲註釋: – ssn 2012-01-07 13:03:29

+0

好了,解決辦法是先反序列化JSON到POCO。 然後用BsonDocumentWrapper包裝和將其轉換爲一個BsonDocument: 因此,這將是這個樣子,其中T是POCO類型: 牛逼DOC = JsonSerializer.DeserializeFromString (JSON); var wrapper = BsonDocumentWrapper.Create(doc); var bsonDoc = wrapper.ToBsonDocument(); IMongoUpdate updateDoc = new UpdateDocument(「$ set」,bsonDoc); – ssn 2012-01-07 13:03:38

回答

相關問題