2016-07-27 5 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. Там это неявное преобразование из BsonDocument в UpdateDefinition
  3. Там это неявное преобразование из BsonDocument в FilterDefinition

вам может сделать все, что нужно для этого одного лайнера, (не обязательно):

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

 Смежные вопросы

  • Нет связанных вопросов^_^