2016-07-27 5 views
1

mongodb 레코드를 업데이트하는 데 사용할 사전이 있습니다. 나는 간단한 foreach를 사용하여 사전을 반복하고 UpdateDefinition 객체를 생성한다.mongodb C# 드라이버 업데이트 여러 필드

IDictionary<string, object> document = GetDocument(); 
string firstKey = document.Keys.First(); 
var update = Builders<BsonDocument>.Update.Set(firstKey, document[firstKey]); 

foreach (var key in document.Keys) 
{ 
    update = update.Set(key, document[key]); 
} 

이 끔찍한입니다 : 문제는 내가 빈 UpdateDefinition 객체를 초기화 할 수 없습니다, 따라서 기존의 키 값으로 UpdateDefinition를 초기화 강요하고 있다는 것입니다. FilterDefinition에는 빈 필터가 있는데이 필터는 이러한 목적에 효과적입니다. 반복적 인 UpdateDefinitions를 구축하는 것과 비슷한 것이 있습니까?

답변

1

사용 단서 :

  1. BsonDocumentDictionary 매개 변수가있는 생성자가
  2. UpdateDefinition
  3. -BsonDocument에서 암시 적 변환은 FilterDefinition

당신에게로 BsonDocument에서 암시 적 변환 거기있다 이 하나의 라이너로 모든 것을 줄일 수 있습니다, (필수 사항은 아닙니다.) :

// IDictionary<string, object> dict = ...; 
collection.UpdateOne(new BsonDocument("_id", "some_filter"), new BsonDocument("$set", new BsonDocument(dict)), new UpdateOptions { IsUpsert = true }); 
관련 문제