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

本文关键字:字段 更新 驱动程序 mongodb | 更新日期: 2023-09-27 17:58:48

我有一个字典,我想用它来更新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,有类似的东西吗?

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

使用线索:

  1. BsonDocument有一个带有Dictionary参数的构造函数
  2. 存在从BsonDocumentUpdateDefinition的隐式转换
  3. 存在从BsonDocumentFilterDefinition的隐式转换

你可以把所有东西都减少到这一行,(追加销售不是强制性的):

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