Sie können etwas wie unten im 2.5-Treiber mit der 3.6-Version versuchen.
Findet das Dokument mit filter
Kriterien und update
was die neue Positionskennung
enthält um mehrere Elemente im Array innerhalb von UpdateOne
zu aktualisieren Methode.
$[]
aktualisiert alle Tags
Arrays, um neue Elemente in alle Categories
aufzunehmen Reihe. Es fungiert als Platzhalter zum Aktualisieren aller Elemente im Array.
Drücken Sie
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Ziehen
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Zusätzliche Informationen:
Sie können die ArrayFilters
setzen Optionen in UpdateOptions
zum Anwenden von Abfragekriterien auf verschachtelte Arrays, um zu steuern, welche Elemente aktualisiert werden sollen.
Zum Beispiel, um alle Kategorien im Tags-Array zu aktualisieren, wobei jedes Tag Name
hat Name.
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);