Amazon dynamodb DynamoDB-更新项,其中X<;=Y
我有一个DynamoDb表,它定义了一个复合键Amazon dynamodb DynamoDB-更新项,其中X<;=Y,amazon-dynamodb,Amazon Dynamodb,我有一个DynamoDb表,它定义了一个复合键 $response = $this->dynamoDb->createTable([ ... 'KeySchema' => [ [ 'AttributeName' => 'product_code', 'KeyType' => 'HASH'
$response = $this->dynamoDb->createTable([
...
'KeySchema' => [
[
'AttributeName' => 'product_code',
'KeyType' => 'HASH'
],
[
'AttributeName' => 'token',
'KeyType' => 'RANGE'
]
]
...
]);
我希望能够更新“product_code”=“X”和“created_at”中的所有记录,以下内容摘自AWS DynamoDB API参考中的UpdateItem: 对于主键,必须提供所有属性。例如,对于一个简单的主键,您只需要为分区键提供一个值。对于复合主键,必须同时提供分区键和排序键的值 在代码(更新项部分)中,您只提供哈希键(
product\u code
)。您必须在条件表达式
属性中提供范围键(标记
),因为您定义了复合键
编辑:
(关于评论)
下面介绍UpdateItem的参数:
请求参数
键
要更新的项的主键。每个元素由一个
属性名称和该属性的值
对于主键,必须提供所有属性。对于
例如,对于一个简单的主键,您只需要提供一个值
对于分区键。对于复合主键,必须提供
分区键和排序键的值
类型:字符串到AttributeValue对象映射
要求:是
如您所见,UpdateItem操作需要主键。
因此,不能使用辅助索引将UpdateItem指向要更新的项集合
但是,您可以通过辅助索引来创建表,并收集结果项的主键,例如在数组keystupdate
中。
然后,您可以更新所需的项目,这些项目的键位于
keyToUpdate
中。编辑后,我的答案将稍有变化。请注意,您必须在条件表达式
属性中提供范围键,在这种情况下-标记
(以前是在创建的)问题是我不想使用标记,否则我将只检索一条记录(?),因为它创建了唯一的复合键。我需要根据产品代码和procesed_的值更新所有记录。我创建了一个二级索引,它使用产品代码并在处处理。但我不确定我的思路是否正确。
$response = $this->dynamoDb->updateItem([
'TableName' => 'products',
'ExpressionAttributeValues' => [
':val1' => ['N' => (string)$this->input['product_code']]
':val2' => ['N' => (string)$this->product['created_at']['N']],
':val3' => ['N' => (string)strtotime("now")],
],
'ConditionExpression' => 'product_code = :val1 AND processed_at <= :val2',
'UpdateExpression' => 'set processed_at = :val3'
]);
[Key] is missing and is a required parameter