2016-07-27 100 views
1

我有一本我想用來更新mongodb記錄的字典。我使用一個簡單的foreach來迭代字典並構造一個UpdateDefinition對象。 的問題是,我不能初始化一個空UpdateDefinition對象,因此我被迫與現有的密鑰值初始化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]); 
} 

這是可怕的。 FilterDefinition有一個空的過濾器,它非常適合這個用途。有什麼類似的構建迭代UpdateDefinitions?

回答

1

使用線索:

  1. BsonDocument有一個Dictionary參數的構造函數
  2. 有從BsonDocumentUpdateDefinition
  3. 的隱式轉換有從BsonDocumentFilterDefinition

你的隱式轉換可以減少一切到這一個班輪, (upsert不是強制性的):

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