您可以在 3.6 版本的 2.5 驱动程序中尝试如下操作。
查找文档filter
标准和update
其中包括新的位置标识符更新数组中的多个元素UpdateOne
method.
$[]更新所有的Tags
数组中包含新项目Categories
大批。它充当更新数组中所有元素的占位符。
Push
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Pull
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
附加信息:
您可以设置ArrayFilters
中的选项UpdateOptions
用于在嵌套数组上应用查询条件来控制要更新的元素。
例如,更新标签数组中的所有类别,其中每个标签都有Name
name.
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[t].Categories", "Item 3");
var arrayFilters = new List<ArrayFilterDefinition>{ new ArrayFilterDefinition(new BsonDocument("t.Name", "name")) };
var updateOptions = new UpdateOptions({ArrayFilters = arrayFilters});
var result = collection.UpdateOne(filter, update, updateOptions);