AWS DynamoDb - 更新列表中的特定地图 (.NET)

AWS DynamoDb - Updating a specific map in list (.NET)

我有一个名为 "Categories" 的属性,其中包含地图列表。我希望能够使用其唯一 ID 仅更新这些地图中的一个。我的数据结构如下:

"EstablishmentID": "12345abc",
"Categories": [
{
  "408eec12-2415-45d3-b703-b8ba0d55261c": {        
    "CategoryName": "Cat11",        
    "CategoryVisible": true
  }
},
{
  "586a95ab-e39d-4711-8770-f60dedcf6059": {    
    "CategoryName": "Cat2",       
    "CategoryVisible": true
  }
}
]

当我想更新其中一个类别时,我使用了 SET 更新表达式并且(据我所知)我正确地输入了文档路径。这是我的更新表达式代码:

UpdateItemRequest request = new UpdateItemRequest
        {
            TableName = "Menu",
            Key = new Dictionary<string, AttributeValue> { { "EstablishmentID", new AttributeValue { S = establishmentID.ToString() } } },
            ExpressionAttributeNames = new Dictionary<string, string>
            {
                {"#C", "Categories"},
                {"#I", category.CategoryID.ToString()}
            },
            ExpressionAttributeValues = new Dictionary<string, AttributeValue>
            {
                {":CategoryToUpdate", new AttributeValue{M=values } }
            },
            UpdateExpression = "SET #C.#I = :CategoryToUpdate"

        };

当我尝试 运行 我的更新时,我收到以下错误:

The document path provided in the update expression is invalid for update

对我来说,这似乎无法找到对象 Categories => [categoryID]。关于能够在列表中找到我的特定类别,有谁知道我可能遗漏了什么。

提前致谢。 李

您不能像这样使用列表和查询。 #C.#I 将引用 Categories.408eec12-2415-45d3-b703-b8ba0d55261c。将您的格式更改为:

"EstablishmentID": "12345abc",
"Categories": {
  "408eec12-2415-45d3-b703-b8ba0d55261c": {        
    "CategoryName": "Cat11",        
    "CategoryVisible": true
  },
  "586a95ab-e39d-4711-8770-f60dedcf6059": {    
    "CategoryName": "Cat2",       
    "CategoryVisible": true
  }
}

那么您的查询应该有效。