mongodb C# 驱动更新多个字段

Ofe*_*eim 5 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]);
}
Run Code Online (Sandbox Code Playgroud)

这太可怕了。FilterDefinition 有一个空的 Filter 非常适合此目的。是否有类似的构建迭代 UpdateDefinitions 的方法?

and*_*ian 5

使用线索:

  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 });
Run Code Online (Sandbox Code Playgroud)