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

mongodb C#驱动程序更新多个字段,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我有一本字典,我想用它来更新mongodb记录。我使用一个简单的foreach来迭代字典并构造一个UpdateDefinition对象。 问题是我无法初始化空的UpdateDefinition对象,因此我被迫使用现有键值初始化UpdateDefinition: IDictionary<string, object> document = GetDocument(); string firstKey = document.Keys.First(); var update = Build

我有一本字典,我想用它来更新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]);
}
IDictionary document=GetDocument();
string firstKey=document.Keys.First();
var update=Builders.update.Set(firstKey,文档[firstKey]);
foreach(document.Keys中的var键)
{
update=update.Set(key,document[key]);
}
这太可怕了。FilterDefinition有一个空筛选器,它非常适合此用途。构建迭代更新定义有类似的方法吗?

使用线索:

  • BsonDocument
    有一个带有
    Dictionary
    参数的构造函数
  • BsonDocument
    UpdateDefinition
  • 有一个从
    BsonDocument
    FilterDefinition
  • 您可以将所有内容简化为这一行(upsert不是强制性的):

    //IDictionary dict=。。。;
    UpdateOne(新的BsonDocument(“\u id”,“某些过滤器”)、新的BsonDocument(“$set”,新的BsonDocument(dict))、新的UpdateOptions{isupert=true});
    
    // IDictionary<string, object> dict = ...;
    collection.UpdateOne(new BsonDocument("_id", "some_filter"), new BsonDocument("$set", new BsonDocument(dict)), new UpdateOptions { IsUpsert = true });