Puoi provare qualcosa come di seguito nel driver 2.5 con la versione 3.6.
Trova il documento con filter criteri e update che include il nuovo identificatore di posizione
per aggiornare più elementi nell'array all'interno di UpdateOne metodo.
$[]
aggiorna tutti i Tags array per includere il nuovo elemento in tutte le Categories Vettore. Agisce come segnaposto per aggiornare tutti gli elementi nell'array.
Premi
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Tira
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Informazioni aggiuntive:
Puoi impostare ArrayFilters opzioni in UpdateOptions per applicare criteri di query su array nidificati per controllare quali elementi aggiornare.
Ad esempio per aggiornare tutte le Categorie nell'array Tag in cui ogni tag ha Name nome.
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);