Du kan prøve noget som nedenfor i 2.5 driver med 3.6 version.
Finder dokumentet med filter
kriterier og update
som inkluderer ny positionel identifikator
at opdatere flere elementer i array inde i UpdateOne
metode.
$[]
opdaterer alle Tags
arrays for at inkludere nyt element i alle Categories
array. Det fungerer som en pladsholder til opdatering af alle elementer i array.
Skub
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Træk
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Yderligere oplysninger:
Du kan indstille ArrayFilters
muligheder i UpdateOptions
til anvendelse af forespørgselskriterier på indlejret array for at kontrollere, hvilke elementer der skal opdateres.
For eksempel for at opdatere alle kategorier i tags-arrayet, hvor hvert tag har Name
navn.
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);