在DynamoDb中使用相同的哈希键更新多个项目

时间:2016-07-20 10:37:14

标签: amazon-dynamodb nosql

我有一个存储用户视频的dynamodb表。 它的结构如下:

{
   "userid": 324234234234234234, // Hash key
   "videoid": 298374982364723648 // Range key
   "user": {
      "username": "mario"
   }
}

我想更新特定用户的所有视频的用户名。 可以通过简单的更新,或者我必须扫描整个表格一次更新一个项目

var params = {
    TableName: DDB_TABLE_SCENE,
    Key: {
        userid: userid,
    },
    UpdateExpression: "SET username = :username",
    ExpressionAttributeValues: { ":username": username },
    ReturnValues: "ALL_NEW",
    ConditionExpression: 'attribute_exists (userid)' 
};
docClient.update(params, function(err, data) {
    if (err) fn(err, null);
    else fn(err, data.Attributes.username);
});

我收到以下错误,我认为范围键是必要的。

ValidationException: The provided key element does not match the schema

1 个答案:

答案 0 :(得分:1)

Dynamo不支持跨多个项目的写入操作(即,一次支持多个项目)。您必须先扫描/查询表格,否则生成您要更新的所有项目的列表,然后逐个更新。

Dynamo确实提供了一个批处理API,但这仍然只是一次批量组合25个更新的方法。它不是您想要实现的多项目更新的代理。