Vous pouvez essayer quelque chose comme ci-dessous dans le pilote 2.5 avec la version 3.6.
Trouve le document avec filter
critères et update
qui inclut le nouvel identifiant de position
pour mettre à jour plusieurs éléments dans le tableau à l'intérieur de UpdateOne
méthode.
$[]
met à jour tous les Tags
tableaux pour inclure un nouvel élément dans toutes les Categories
déployer. Il agit comme un espace réservé pour mettre à jour tous les éléments du tableau.
Poussez
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Tirez
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Informations supplémentaires :
Vous pouvez définir les ArrayFilters
options dans UpdateOptions
pour appliquer des critères de requête sur un tableau imbriqué afin de contrôler les éléments à mettre à jour.
Par exemple, pour mettre à jour toutes les catégories dans le tableau Tags où chaque balise a Name
nom.
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);