mongodb C# 驱动程序更新多个字段
mongodb C# Driver update multiple fields
我有一本字典,我想用它来更新 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 有一个空的过滤器,非常适合这个目的。是否有类似的构建迭代 UpdateDefinitions 的方法?
使用线索:
BsonDocument
有一个带有 Dictionary
参数的构造函数
- 存在从
BsonDocument
到 UpdateDefinition
的隐式转换
- 存在从
BsonDocument
到 FilterDefinition
的隐式转换
你可以将所有内容都减少到这一行,(更新不是强制性的):
// IDictionary<string, object> dict = ...;
collection.UpdateOne(new BsonDocument("_id", "some_filter"), new BsonDocument("$set", new BsonDocument(dict)), new UpdateOptions { IsUpsert = true });
我有一本字典,我想用它来更新 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 有一个空的过滤器,非常适合这个目的。是否有类似的构建迭代 UpdateDefinitions 的方法?
使用线索:
BsonDocument
有一个带有Dictionary
参数的构造函数- 存在从
BsonDocument
到UpdateDefinition
的隐式转换
- 存在从
BsonDocument
到FilterDefinition
的隐式转换
你可以将所有内容都减少到这一行,(更新不是强制性的):
// IDictionary<string, object> dict = ...;
collection.UpdateOne(new BsonDocument("_id", "some_filter"), new BsonDocument("$set", new BsonDocument(dict)), new UpdateOptions { IsUpsert = true });