Amazon web services DynamoDB更新JSON
我有一张dynamodb桌子,背着一辆购物车。架构是CartKey,然后是包含CartItemId的映射列表。是否有方法根据CartKey和CartItemId更新嵌套在地图列表中的购物车项目Amazon web services DynamoDB更新JSON,amazon-web-services,amazon-dynamodb,aws-sdk,Amazon Web Services,Amazon Dynamodb,Aws Sdk,我有一张dynamodb桌子,背着一辆购物车。架构是CartKey,然后是包含CartItemId的映射列表。是否有方法根据CartKey和CartItemId更新嵌套在地图列表中的购物车项目 谢谢我正在寻找解决同一问题的方法。不幸的是,我认为没有 在成熟的基于文档的数据库(如MongoDB)中,您应该能够指定查询的索引,但DynamoDB不支持这一点 下一个最好的方法是使用整个CartItems数组查询Cart文档,对其进行迭代以找到CartItem的索引,并执行条件写入。例如:更新文档并将C
谢谢我正在寻找解决同一问题的方法。不幸的是,我认为没有 在成熟的基于文档的数据库(如MongoDB)中,您应该能够指定查询的索引,但DynamoDB不支持这一点 下一个最好的方法是使用整个CartItems数组查询Cart文档,对其进行迭代以找到CartItem的索引,并执行条件写入。例如:更新文档并将CartItems[7]。仅当CartItems[7]。ProductId为WSK-1234时,数量设置为4
是的,您需要先读后写,并执行一些客户端搜索,但至少可以确保您没有更新错误的项目。我会将您的数据模型从地图列表更改为键为CartItemId的地图 示例文件:
{
CartKey : 'Cart-123',
items : : {
CartItemId1 : { quantity : 1, productId: "pid-123" },
CartItemId2 : { quantity : 4, productId: "pid-987" }
}
}
然后,您可以对特定项目执行更新表达式
UpdateExpression: "set items.CartItemId1.quantity = 2"
我用一张地图做了类似的事情,这对我很有用。希望这会有帮助
$RegID = "abracadabra";
$tableName="DefaultDelivery";
$marshaler = new Marshaler();
$requested_delivery = '{"Packet0":{"PacketNo":"2","Quantity":"1000ml","Type":"Toned Milk"},"Packet2":{"PacketNo":"4","Quantity":"250ml","Type":"Toned Milk"}}';
$eav = $marshaler->marshalJson('
{
":RequestedDelivery" : '.$requested_delivery.'
}
');
$key = $marshaler->marshalJson('
{
"RegistrationID" : "'.$RegID.'"
}
');
$params = [
'TableName' => "$tableName",
'Key' => $key,
'ExpressionAttributeValues' => $eav,
'UpdateExpression' => 'SET RequestedDelivery = :RequestedDelivery',
'ReturnValues' => 'UPDATED_NEW'
];
try {
$result = $client->updateItem($params);
echo "SUCCESS";
}
catch (DynamoDbException $e){
echo "Unable to update Item : \n";
}
请提供一个例子和您尝试过的内容。