MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

C # - MongoDB - Mettre à jour un élément dans un document imbriqué

Tout d'abord, vous devez exécuter cette commande dans votre MongoDB pour appliquer les nouvelles fonctionnalités de la version 3.6.1 db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )

Voici le code dont vous avez besoin pour cette mise à jour :

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

De plus, vous pouvez définir ces paramètres dans votre MongoDB pour examiner vos requêtes finales et les exécuter manuellement dans RoboMongo ou Studio 3T pour les déboguer :

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

recherchez la requête "UPDATE" dans le fichier journal. Après cela, vous pouvez réinitialiser le paramètre de journal à 0

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

J'ai eu le même problème et j'ai posé la même question iciJetez un œil.