mongodb C#驱动程序更新多个字段

时间:2016-07-27 14:00:30

标签: c# mongodb mongodb-.net-driver

我有一本字典,我想用它来更新mongodb记录。我正在使用一个简单的foreach来迭代字典并构造一个UpdateDefinition对象。 问题是我无法初始化一个空的UpdateDefinition对象,因此我被迫使用现有的键值初始化UpdateDefinition:

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有一个空的Filter,可以很好地实现此目的。构建迭代的UpdateDefinitions有什么类似的东西吗?

1 个答案:

答案 0 :(得分:2)

使用线索:

  1. BsonDocument的构造函数带有Dictionary参数
  2. BsonDocumentUpdateDefinition
  3. 的隐式转换
  4. BsonDocumentFilterDefinition
  5. 的隐式转换

    你可以减少这一个班轮的一切,(upsert not mandatory):

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