Du kan prova något som nedan i 2.5-drivrutin med 3.6-version.
Hittar dokumentet med filter
kriterier och update
som inkluderar ny positionsidentifierare
för att uppdatera flera element i arrayen inuti UpdateOne
metod.
$[]
uppdaterar alla Tags
arrayer för att inkludera nytt objekt i alla Categories
array. Den fungerar som en platshållare för att uppdatera alla element i arrayen.
Tryck
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Dra
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Ytterligare information:
Du kan ställa in ArrayFilters
alternativ i UpdateOptions
för att tillämpa frågekriterier på kapslad array för att styra vilka element som ska uppdateras.
Till exempel för att uppdatera alla kategorier i taggarray där varje tagg har Name
namn.
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);