C#-MongoDB-更新嵌套文档中的元素
我有一个MongoDB文档,如下所示C#-MongoDB-更新嵌套文档中的元素,c#,mongodb,C#,Mongodb,我有一个MongoDB文档,如下所示 { "_id" : ObjectId("5a55775cbd12982cc063c71a"), "ShipmentNumber" : "00004000000048652254", "Cartons" : [ { "_id" : ObjectId("5a5575bcbd12982cc063b718"), "CartonNumber" : "0076013926580S", "Skus" : [
{
"_id" : ObjectId("5a55775cbd12982cc063c71a"),
"ShipmentNumber" : "00004000000048652254",
"Cartons" : [
{
"_id" : ObjectId("5a5575bcbd12982cc063b718"),
"CartonNumber" : "0076013926580S",
"Skus" : [
{
"_id" : ObjectId("5a5575bcbd12982cc063b719"),
"SkuNumber" : "06577647",
"ShippedQuantity" : 12,
},
{
"_id" : ObjectId("5a5575bcbd12982cc063b519"),
"SkuNumber" : "06577657",
"ShippedQuantity" : 15,
}
],
"IsScanned" : false,
},
}
如何根据特定Sku元素在C代码中的“#id”更新其“ShippedQuantity”
我试过下面的方法。但它不起作用。
获取错误消息,如
无法使用零件(纸箱中的纸箱$[].SKU.$.ShippedQuantity)来
遍历元素
var filter=Builders.filter.Eq(“Cartons.sku.\u id”,新ObjectId(“5A5575BCD12982CC063B519”);
var update=Builders.update.Set(“纸箱$[].SKU.$.ShippedQuantity”,50)
我在尝试更新多级文档时遇到了困难。
(在这种情况下,我有一个纸箱列表,每个纸箱都有自己的sku列表,我需要更新特定sku的元素)
请提供使用C#更新MongoDB中此内部级别(超过2个级别)文档的解决方案或替代方法
我将MongoDB服务器更新为最新的3.6.1。但这也无济于事
感谢您的帮助。首先,您需要在MongoDB中运行此命令以应用3.6.1版的新功能
db.adminCommand({setFeatureCompatibilityVersion:“3.6”})
以下是更新所需的代码:
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);
在日志文件中查找“更新”查询。之后,您可以将日志设置重置回0
db.setProfilingLevel(0)
db.setLogLevel(0)
我也有同样的问题,问了同样的问题
查看一下。首先,您需要在MongoDB中运行此命令,以应用3.6.1版的新功能
db.adminCommand({setFeatureCompatibilityVersion:“3.6”})
以下是更新所需的代码:
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);
在日志文件中查找“更新”查询。之后,您可以将日志设置重置回0
db.setProfilingLevel(0)
db.setLogLevel(0)
我也有同样的问题,问了同样的问题
请看一看。我们可以使用mongo.net fluent library进行此操作吗?我们可以使用mongo.net fluent library进行此操作吗?