Můžete zkusit něco jako níže v ovladači 2.5 s verzí 3.6.
Najde dokument pomocí filter
kritéria a update
který zahrnuje nový poziční identifikátor
pro aktualizaci více prvků v poli uvnitř UpdateOne
metoda.
$[]
aktualizuje všechny Tags
pole pro zahrnutí nové položky do všech Categories
pole. Funguje jako zástupný symbol pro aktualizaci všech prvků v poli.
Zatlačte
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Vytáhněte
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Další informace:
Můžete nastavit ArrayFilters
možnosti v UpdateOptions
pro použití kritérií dotazu na vnořené pole k řízení toho, jaké prvky se mají aktualizovat.
Chcete-li například aktualizovat všechny kategorie v poli Tags, kde má každý tag Name
jméno.
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);