Je kunt zoiets als hieronder proberen in 2.5 driver met 3.6 versie.
Vindt het document met filter
criteria en update
inclusief nieuwe positionele identifier
om meerdere elementen in de array bij te werken binnen UpdateOne
methode.
$[]
werkt alle Tags
bij arrays om een nieuw item op te nemen in alle Categories
reeks. Het fungeert als een tijdelijke aanduiding voor het bijwerken van alle elementen in de array.
Duwen
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Trek
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Aanvullende informatie:
U kunt de ArrayFilters
. instellen opties in UpdateOptions
voor het toepassen van zoekcriteria op geneste arrays om te bepalen welke elementen moeten worden bijgewerkt.
Bijvoorbeeld om alle categorieën in de tags-array bij te werken, waarbij elke tag Name
. heeft naam.
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);