2016-07-27 17 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には、この目的に適した空のFilterがあります。反復的なUpdateDefinitionsを構築するための類似点はありますか?

答えて

1

手がかりを使用して:

  1. BsonDocument
  2. Dictionaryパラメータを持つコンストラクタを持つUpdateDefinition
  3. からBsonDocumentからの暗黙的な変換BsonDocumentからFilterDefinition

への暗黙的な変換は、あなたがありますがありますこの1つのライナーにすべてを減らすことができます、 (必須ではありません):

// IDictionary<string, object> dict = ...; 
collection.UpdateOne(new BsonDocument("_id", "some_filter"), new BsonDocument("$set", new BsonDocument(dict)), new UpdateOptions { IsUpsert = true }); 
関連する問題