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);