Marco
Marco

Reputation: 1077

Update Multiple Items with same Hash Key in DynamoDb

I have a dynamodb table that stores users videos. It's structured like this:

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

I want to update username for all videos of a specific user. It's possible with a simple update or i have to scan the complete table and update one item a time?

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);
});

I receive the following error, I suppose the range key is necessary.

ValidationException: The provided key element does not match the schema

Upvotes: 0

Views: 2866

Answers (1)

Mike Dinescu
Mike Dinescu

Reputation: 55720

Dynamo does not support write operations across multiple items (ie. for more than one item at a time). You will have to first scan/query the table, or otherwise generate a list of all items you'd like to update, and then update them one by one.

Dynamo does provide a batching API but that is still just a way to group updates together in batches of 25 at a time. It's not a proxy for a multi-item update like you're trying to achieve.

Upvotes: 1

Related Questions