2016-07-20 6 views
0

Ich habe eine dynamodb Tabelle, die Benutzervideos speichert. Es ist wie folgt strukturiert:Aktualisieren mehrerer Elemente mit demselben Hash-Schlüssel in DynamoDb

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

ich Benutzername für alle Videos von einem bestimmten Benutzer aktualisieren möchten. Es ist möglich, mit einem einfachen Update oder ich muss scannen Sie die komplette Tabelle und aktualisieren ein Element pro Zeit?

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

Ich erhalte den folgenden Fehler, ich nehme an, der Bereichsschlüssel ist notwendig.

ValidationException: The provided key element does not match the schema 

Antwort

1

Dynamo unterstützt keine Schreibvorgänge für mehrere Objekte (dh für mehrere Objekte gleichzeitig). Sie müssen zuerst die Tabelle scannen/abfragen oder auf andere Weise eine Liste aller Elemente erstellen, die Sie aktualisieren möchten, und sie dann einzeln aktualisieren.

Dynamo bietet zwar eine Batching-API, aber das ist immer noch eine Möglichkeit, Aktualisierungen in Chargen von 25 gleichzeitig zu gruppieren. Es ist kein Proxy für ein Multi-Item-Update, wie Sie es versuchen.

Verwandte Themen