有人可以帮我提供update-item
使用aws dynamodb更新特定字段的示例吗?我无法找到update-item
的任何示例,但它无法帮助我更新特定项目。
例如:
aws dynamodb update-item --table-name x --key y --attribute-updates "z #abc" --endpoint-url://localhost:8000
对于上述查询,我收到以下错误:
Error parsing parameter '--key': Invalid Json : y
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
我在表PlayersInfo中有以下字段 我已分配给$ newtablename
PlayerId-> HASH PlayerName-> RANGE PlayerPrice PlayerType PlayerNationality
$response = $client->updateItem(array(
"TableName" => $newtablename,
"Key" => array(
"PlayerId" => array('N' => 1),
"PlayerName" => array('S' => "Virat Kohli")
),
"AttributeUpdates" =>array("PlayerPrice"=>array("Value" => array('N'=>1000)),array("PlayerType"=>array("Value" => array('S'=>"Batsman")),array("PlayerNationality"=>array("Value" => array('S'=>"India")),
);
"ReturnValues" => \Aws\DynamoDb\Enum\ReturnValue::ALL_NEW
));
这必须有效.. 我在密钥中使用了id和name,因为它们区分HASH和RANGE键,所以我们必须在key中指定它们。
答案 1 :(得分:1)
当你的数组有一些空值时,上面的例子将不起作用。
假设我正在从某种形式中检索值
所以我必须做这样的工作..
if (!empty($_POST['update'])) {
$id = intval($_POST['id']);
$name = strval($_POST['name']);
$type = strval($_POST['type']);
$nationality = strval($_POST['nationality']);
$price = intval($_POST['price']);
if(!empty($price))
{
$value['PlayerPrice']=array(
"Value" => array('N' => $price)
);
}
if(!empty($type))
{
$value['PlayerType']=array(
"Value" => array('S' => $type)
);
}
if(!empty($nationality))
{
$value['PlayerNationality']=array(
"Value" => array('S' => $nationality)
);
}
print_r($value);
$response = $client->updateItem(array(
"TableName" => $newtablename,
"Key" => array(
"PlayerId" => array('N' => $id),
"PlayerName" => array('S' => $name)
),
"AttributeUpdates" =>$value,
"ReturnValues" => \Aws\DynamoDb\Enum\ReturnValue::ALL_NEW
));
echo "Record Updated";
}
所以即使任何属性都有空值,它也不会给出错误,因为如果要将任何空值传递给表,它将不会更新并触发错误
这是最重要的事情
还有一件事我将PlayerId作为HASH键,将PlayerName作为RANGE键
如果我们在任何一个字段中使用不同的值进行更新,它将创建一个新项目,因为它们都会创建复合键
答案 2 :(得分:0)
参数 - 键不仅仅是主键的名称。
要以JSON格式更新的项目的主键。每个元素都包含一个属性名称和该属性的值。
点击此处了解更多信息" http://docs.aws.amazon.com/cli/latest/reference/dynamodb/update-item.html"
例如,如果我有一个表 Employee ,其中 emp_id 作为其主键,则应将update-item称为
aws dynamodb update-item --table-name Employee --key '{ "emp_id" : { "N" : "006" } }' --attribute-updates <value>