Amazon dynamodb DynamoDB:如何将值附加到现有项的列表(数组)中

Amazon dynamodb DynamoDB:如何将值附加到现有项的列表(数组)中,amazon-dynamodb,aws-php-sdk,Amazon Dynamodb,Aws Php Sdk,(我正在使用AWS PHP SDK) 假设我有一张桌子: Table name: article Primary partition key: article_id (Number) 以手动创建的项目为例: { "article_id": 10010, "updated": "2018-02-22T20:15:19.28800Z", "comments": [ "Nice article!", "Thank you!" ] } 添加新注释: 我知道如何通过以下方式完全

(我正在使用AWS PHP SDK)

假设我有一张桌子:

Table name: article
Primary partition key: article_id (Number)
以手动创建的项目为例:

{
    "article_id": 10010,
    "updated": "2018-02-22T20:15:19.28800Z",
    "comments": [ "Nice article!", "Thank you!" ]
}
添加新注释: 我知道如何通过以下方式完全更新(覆盖)此现有项:

$key = $marshaler->marshalJson('
    {
        "article_id": 10010
    }
');

$eav = $marshaler->marshalJson('
    {
        ":u": "2018-02-22T20:15:19.28800Z",
        ":c": [ "Nice article!", "Thank you!", "This is the new one!" ]
    }
');

$params = [
    'TableName' => 'article',
    'Key' => $key,
    'ExpressionAttributeValues'=> $eav,
    'UpdateExpression' => 'set updated=:u, comments=:c',
    'ReturnValues' => 'UPDATED_NEW'
];
我可以通过这种方式添加新值(aka)添加新注释。但这实际上仍然在重新创建整个项目,这不是我喜欢的方式

我如何简单地将新值添加到现有项内的列表/数组中

使用SET更新列表元素时,该元素的内容将替换为指定的新数据。如果元素不存在,SET将在列表的末尾追加新元素

创建表格

aws dynamodb create-table \
    --table-name article \
    --attribute-definitions AttributeName=article_id,AttributeType=N \
    --key-schema AttributeName=article_id,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
aws dynamodb update-item \
    --table-name article \
    --key '{"article_id":{"N":"123"}}' \
    --update-expression "SET comments[50] = :c, updated=:u" \
    --expression-attribute-values '{
        ":u": {"S": "01:01:01"},
        ":c": {"S": "This is the new one!"}
      }' \
    --return-values ALL_NEW
添加项目

aws dynamodb put-item  \
        --table-name article \
        --item '{
            "article_id": {"N": "123"},
            "updated": {"S": "00:00:00"},
            "comments": {
                  "L": [
                    { "S": "Nice article!" },
                    { "S": "Thank you!" }
                ]}
          }'
更新项目

aws dynamodb create-table \
    --table-name article \
    --attribute-definitions AttributeName=article_id,AttributeType=N \
    --key-schema AttributeName=article_id,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
aws dynamodb update-item \
    --table-name article \
    --key '{"article_id":{"N":"123"}}' \
    --update-expression "SET comments[50] = :c, updated=:u" \
    --expression-attribute-values '{
        ":u": {"S": "01:01:01"},
        ":c": {"S": "This is the new one!"}
      }' \
    --return-values ALL_NEW
列表
注释[]
在更新之前包含两个元素(索引0和1)。由于
comments[50]
不存在,SET操作将把它附加到列表的末尾(
comments[2]
)。

使用调用可以更新单个字段而不更新整个项目,但是您仍然需要覆盖整个
comments
数组。