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

问题描述 投票:1回答:1

我有一个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,
    },
}

如何根据C#代码中的“_id”更新特定Sku元素的“ShippedQuantity”?

我试过下面的东西。但它没有用。获取错误消息

不能使用部分(Cartons of Cartons。$ []。Skus。$。ShippedQuantity)来遍历元素

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

当我尝试更新多级文档时,我遇到了困难。 (在这种情况下,我有一个纸箱列表,每个纸箱都有自己的skus列表,我需要更新特定的sku元素)

请提供一种解决方案或替代方法,使用C#更新MongoDB中的这个内部级别(超过2个级别)文档。

我将MongoDB服务器更新到最新的3.6.1。但这也没有帮助。

谢谢你的帮助。

c# mongodb
1个回答
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);

此外,您可以在MongoDB中运行设置这些设置以查看最终查询并在RoboMongo或Studio 3T中手动运行它们以进行调试:

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

在日志文件中查找“UPDATE”查询。之后,您可以将日志设置重置为0

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

我有同样的问题并问同样的问题Here看看它。

© www.soinside.com 2019 - 2024. All rights reserved.