Anda dapat mencoba sesuatu seperti di bawah ini pada driver 2.5 dengan versi 3.6.
Menemukan dokumen dengan filter
kriteria dan update
yang mencakup pengidentifikasi posisi
baru untuk memperbarui beberapa elemen dalam array di dalam UpdateOne
metode.
$[]
memperbarui semua Tags
array untuk memasukkan item baru di semua Categories
Himpunan. Bertindak sebagai placeholder untuk memperbarui semua elemen dalam array.
Dorong
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Tarik
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Informasi Tambahan:
Anda dapat mengatur ArrayFilters
opsi di UpdateOptions
untuk menerapkan kriteria kueri pada array bersarang untuk mengontrol elemen apa yang akan diperbarui.
Misalnya untuk memperbarui semua Kategori dalam larik Tag di mana setiap tag memiliki Name
nama.
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);