MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

C# – MongoDB – Aktualisieren Sie ein Element in einem verschachtelten Dokument

Zuerst müssen Sie diesen Befehl in Ihrer MongoDB ausführen, um die neuen Funktionen von Version 3.6.1 db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } ) anzuwenden

Hier ist der Code, den Sie für dieses Update benötigen:

var filter = Builders<YOUR_CLASS>.Filter.Eq("_id", new ObjectId("5a55775cbd12982cc063c71a"));
var update = Builders<YOUR_CLASS>.Update.Set("Cartons.$[i].Skus.$[j].ShippedQuantity", 50);

var arrayFilters = new List<ArrayFilterDefinition>
{
    new BsonDocumentArrayFilterDefinition<Setup>(new BsonDocument("i._id", new ObjectId("5a5575bcbd12982cc063b718"))),
    new BsonDocumentArrayFilterDefinition<Setup>(new BsonDocument("j._ID", new ObjectId("5a5575bcbd12982cc063b719")))
};
var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters };
var (updated, errorMessage) = await UpdateOneAsync(filter, update, updateOptions);

Darüber hinaus können Sie diese Einstellungen in Ihrer MongoDB ausführen, um Ihre endgültigen Abfragen anzuzeigen, und sie manuell in RoboMongo oder Studio 3T ausführen, um sie zu debuggen:

db.setProfilingLevel(2)   -> to view query logs under C:\data\log\mongod.log
db.setLogLevel(5)         -> to view query logs under C:\data\log\mongod.log

Suchen Sie in der Protokolldatei nach der Abfrage "UPDATE". Danach können Sie die Protokolleinstellung wieder auf 0 zurücksetzen

db.setProfilingLevel(0)
db.setLogLevel(0)

Ich hatte das gleiche Problem und habe hier die gleiche Frage gestelltSchauen Sie es sich an.