Możesz spróbować czegoś takiego jak poniżej w sterowniku 2.5 z wersją 3.6.
Znajduje dokument za pomocą filter
kryteria i update
który zawiera nowy identyfikator pozycji
zaktualizować wiele elementów w tablicy wewnątrz UpdateOne
metoda.
$[]
aktualizuje wszystkie Tags
tablice do uwzględnienia nowego elementu we wszystkich Categories
szyk. Działa jako symbol zastępczy do aktualizacji wszystkich elementów w tablicy.
Naciśnij
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Pociągnij
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Dodatkowe informacje:
Możesz ustawić ArrayFilters
opcje w UpdateOptions
do stosowania kryteriów zapytania w zagnieżdżonej tablicy w celu kontrolowania, które elementy mają zostać zaktualizowane.
Na przykład, aby zaktualizować wszystkie kategorie w tablicy Tagi, gdzie każdy tag ma Name
imię.
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);