Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-MongoDB-更新嵌套文档中的元素_C#_Mongodb - Fatal编程技术网

C#-MongoDB-更新嵌套文档中的元素

C#-MongoDB-更新嵌套文档中的元素,c#,mongodb,C#,Mongodb,我有一个MongoDB文档,如下所示 { "_id" : ObjectId("5a55775cbd12982cc063c71a"), "ShipmentNumber" : "00004000000048652254", "Cartons" : [ { "_id" : ObjectId("5a5575bcbd12982cc063b718"), "CartonNumber" : "0076013926580S", "Skus" : [

我有一个MongoDB文档,如下所示

{
"_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进行此操作吗?