Ich führe einen in Node.js geschriebenen AWS Lambda-Dienst aus, der mit einer DynamoDB-Datenbank interagiert. Eine meiner Methoden führt ein Update (AWS.DynamoDB.DocumentClient(). Update) auf DynamoDB durch, um ein bestimmtes Element zu aktualisieren. Mein Problem ist jedoch, dass wenn ich versuche, ein Element zu aktualisieren, und dieses Element nicht existiert, dann fügt die Update-Methode dieses neue Element meiner Tabelle hinzu. Dieses Verhalten ist der Standard, der auch in documentation beschrieben wird.DynamoDB: So verhindern Sie das Erstellen eines neuen Elements in UpdateItem, wenn das Element nicht existiert
Ich möchte nicht, dass meine Methode ein neues Element erstellt, wenn es noch nicht existiert. Ich möchte, dass dies nur dann ein Update ist, wenn der Datensatz existiert. Wenn es nicht existiert, muss es nichts tun. Wie erreiche ich das? Ich erwarte, dass ich eine ConditionalExpression verwenden kann, um dies zu erreichen, aber die Versuche, die ich dabei gemacht habe, waren nicht erfolgreich.
Ein Beispiel für die aktuellen Parameter, die ich an die Update-Funktion sende, finden Sie weiter unten. In diesem Beispiel möchte ich den Benutzer aktualisieren, die userId 123 und ich möchte, um das isActive Feld auf ‚false‘ für diesen Benutzer hat (aber ich möchte nur, dies zu tun, wenn der Benutzer 123 existiert tatsächlich!)
const params = {
TableName: 'users',
Key: {
userId: '123',
},
ExpressionAttributeValues: {
':isActive': 'false'
},
UpdateExpression: 'SET isActive = :isActive',
ReturnValues: 'ALL_NEW',
};
Dies ist eine der Optionen, die ich tatsächlich ausprobiert habe. Wenn ich dies tue, erhalte ich eine Ausnahme, ValidationException: Wert in ExpressionAttributeValues, der in Ausdrücken nicht verwendet wird: keys: {: userIdVal} – Stanley
Es sieht so aus, als hätten Sie die userIdVal nicht im Ausdruck angegeben. Haben Sie diesen Teil "userId =: userIdVal" in ConditionExpression aufgenommen? – notionquest
In der Tat habe ich und Rechtschreibung und Syntax überprüft. – Stanley