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);