2012-01-07 4 views
0

json 데이터에서 문서의 PARTIAL 업데이트를 수행하는 일반적인 방법을 만들고 싶습니다. 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); 
    } 

이 거의 작동하지만, 내 문제가 그들이 JSON 표현하는 방법이기 때문에 형 ObjectId가있는 필드가 문자열로 직렬화되어 있다는 것입니다 :이 있습니다. (그들은 클라이언트 측에서 javascript JSON2 lib로 직렬화되었습니다).

그래서 제 질문은 다음과 같습니다

1) 공식 C#을 드라이버에 JSON 데이터로 작업 일반적인 부분 업데이트 방법을 할 수있는 가장 좋은 방법은 무엇입니까? 2) BsonSerializer를 사용할 때 poco 필드를 문자열 대신 올바른 유형으로 올바르게 역 직렬화 할 수 있습니까?

+0

음이 2 시간 전에 내 자신의 질문에 대답 할 수없는, 그래서 여기 주석과 같습니다 – ssn

+0

좋아, 솔루션 먼저 POCO에 JSON을 역 직렬화하는 것이었다. 그런 다음 BsonDocumentWrapper로 포장하고 BsonDocument이 변환 : 은 그래서 T는 POCO 타입이 같은, 모양 : T의 문서 = JsonSerializer.DeserializeFromString (JSON)을; var wrapper = BsonDocumentWrapper.Create (doc); var bsonDoc = wrapper.ToBsonDocument(); IMongoUpdate updateDoc = 새 UpdateDocument ("$ set", bsonDoc); – ssn

답변

관련 문제