Bạn có thể thử một cái gì đó như bên dưới trong trình điều khiển 2.5 với phiên bản 3.6.
Tìm tài liệu bằng filter tiêu chí và update bao gồm từ định danh vị trí
mới để cập nhật nhiều phần tử trong mảng bên trong UpdateOne phương pháp.
$ []
cập nhật tất cả các thẻ Tags mảng để bao gồm mục mới trong tất cả Categories mảng. Nó hoạt động như một trình giữ chỗ để cập nhật tất cả các phần tử trong mảng.
Đẩy
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Kéo
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Thông tin bổ sung:
Bạn có thể đặt ArrayFilters các tùy chọn trong UpdateOptions để áp dụng tiêu chí truy vấn trên mảng lồng nhau để kiểm soát những phần tử cần cập nhật.
Ví dụ:cập nhật tất cả các Danh mục trong mảng Thẻ trong đó mỗi thẻ có Name tên.
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);