来自AWS文档:
注意
BatchWriteItem无法更新项目。要更新项目,请使用UpdateItem API。
但是,从这里的文档中不清楚的是他们的意思是"更新项目"。如果PutRequests
中的项目是现有项目,是否会在正常的PutItem
请求中按预期进行替换,还是会抛出异常?
答案 0 :(得分:1)
他们的意思是你在batchWriteItems中没有updateItem动作,所以是的,你只能" put"正常投放的项目,如果项目存在,将被替换。请记住,batchWriteItem没有受到限制,因此,如果您的应用程序不知道预配置的吞吐量,那么您将面临错误。你也不能使用条件。
答案 1 :(得分:0)
我想以下示例将有所帮助。
假设此查询:
$response = $client->batchWriteItem(array(
"RequestItems" => array(
"user" => array(
array(
"PutRequest" => array(
"Item" => array(
"userId" => array(Type::NUMBER => 7),
"attr1" => array(Type::NUMBER => 1),
"attr2" => array(Type::NUMBER => 2),
"attr3" => array(Type::NUMBER => 3),
)
),
)))));
这将创建一个包含 userId,attr1,attr2,attr3 的项目。 让我们说你执行以下batchWrite
$response = $client->batchWriteItem(array(
"RequestItems" => array(
"user" => array(
array(
"PutRequest" => array(
"Item" => array(
"userId" => array(Type::NUMBER => 7),
"temp1" => array(Type::NUMBER => 11),
"temp2" => array(Type::NUMBER => 22),
)
),
)))));
执行此查询后,Item(行)将是 userId,temp1,temp2 而不是 的用户id,temp1中,TEMP2,attR1位,attR2位,attr3 强>
所以从技术上来说,他们是正确的,我们不能用来更新项目,因为它将创建新项目,使用相同的Hash Key替换旧项目(行)。
因此,如果您想更新项目,那么我们可以使用
$params['temp1'] = array(
'Action' => 'PUT',
'Value' => array(
Type::NUMBER => 555
)
);
}
$response = $client->updateItem(array(
"TableName" => "user",
"Key" => array(
"userId" => array(
Type::NUMBER => 7
)
),
"AttributeUpdates" => $params
)
);
这将更新项目(行)并将 temp1 的值从1更改为555
希望这会有所帮助