Gee*_*cks 5 php amazon-dynamodb
我一定在这里缺少一些简单的东西。该测试的目的是在现有Map中设置一个新元素。下面的PHP测试功能可以很好地更新项目,但不是将person属性的(地图)中间初始值设置为“ T”,而是创建了一个新的顶级属性“ person.mi”并将其设置为“ T” ”。
在对文件路径的文档指定点符号访问地图元素,所以....我不知道我错过了什么。
public function Z() {
$ddb = DynamoDbClient::factory(array('region' => 'us-east-1')); // EC2 role security
try {
$response = $ddb->updateItem(array(
"TableName" => "test",
"Key" => array("id" => array("N" => 1)),
"UpdateExpression" => "SET #fieldName = :value",
"ExpressionAttributeNames" => array("#fieldName" => "person.mi"),
"ExpressionAttributeValues" => array(":value" => array("S" => "T"))
));
} catch (Exception $e) {
throw new DDBException("Call to TestDDB->Z failed: " . $e->getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
有人看到我要去哪里了吗?谢谢。
这是因为点被认为是属性名称的一部分。您应该使用 2 个表达式属性名称。从文档中:
\n\n\n\n但是,如果您决定改用表达式属性名称怎么办?\n 例如,如果您定义
\n\n#mmmk为\n 的替代品,会发生什么情况MyMap.MyKey?DynamoDB 将返回空结果,\n 而不是预期的字符串。这是因为 DynamoDB 将表达式属性值中的点解释为属性名称中的字符。当 DynamoDB 计算表达式 attribute\n name 时#mmmk,它确定MyMap.MyKey引用标量\n attribute\xe2\x80\x94,这不是预期的。正确的方法是定义两个表达式属性名称,每个属性名称对应文档路径中的每个元素:
\n\n\n
\n\n- \n
#mm \xe2\x80\x94 MyMap- \n
#mk \xe2\x80\x94 MyKey然后您可以使用以下投影表达式:
\n\n\n
\n- \n
#mm.#mk