sql >> Databasteknik >  >> NoSQL >> MongoDB

C# - MongoDB - Uppdatera ett element i ett kapslat dokument

Först måste du köra det här kommandot i din MongoDB för att tillämpa de nya funktionerna i version 3.6.1 db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )

Här är koden du behöver för den uppdateringen:

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

Dessutom kan du köra ange dessa inställningar i din MongoDB för att titta på dina slutliga frågor och köra dem manuellt i RoboMongo eller Studio 3T för att felsöka dem:

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

leta efter "UPPDATERA"-frågan i loggfilen. Efter det kan du återställa logginställningen till 0

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

Jag har haft samma problem och ställt samma fråga Här Ta en titt på det.




  1. Jag behöver hämta MongoDBs objekt bara med filtereds array-objekt

  2. Varför finns det NYCKEL- och ARGV-matriser när man anropar Redis Lua-skript?

  3. 6 bästa MapReduce Job Optimization Techniques

  4. Mongo Triple Compound Index