使用亚马逊dynamodb更新项目

时间:2014-09-02 14:27:18

标签: amazon-web-services

有人可以帮我提供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

有人可以帮我解决这个问题吗?

3 个答案:

答案 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>