Unten ist ein Beispielartikelobjekt/Datensatz in DynamoDb gespeichert. Ich verwende NodeJS und AWS.DynamoDB.DocumentClient
, um auf die Datenbank zuzugreifen.Dynamodb - Aktualisiere den Wert des JSON-Objekts in einem Array von Objekten.
Ich baue eine PUT-Funktion aus, um den Status für ein JSON-Objekt in einem Array zu aktualisieren. Die Funktion hat Zugriff auf uuid
und uuid
des Raums. Wie kann ich einfach (kreativ) den Wert des entsprechenden Feldes status
aktualisieren, wenn das Array von JSON-Objekten angegeben wird?
Params:
let params = {
TableName: room-table,
Key: {
uuid: event.body.uuid
},
UpdateExpression : "??",
ExpressionAttributeNames: {
"??":"??"
},
ExpressionAttributeValues:{
"??":"??"
},
ReturnValues:"ALL_NEW"
};
Artikel Objekt:
{
"Item": {
"uuid": "77b1e88e-5e60-44d9-b6ca-aec345c0dc99",
"rooms": [
{
"room": "303",
"status": "pending",
"uuid": "b8f1c1a8-04a9-4c2e-82ad-bc3e81face35"
},
{
"room": "302",
"status": "pending",
"uuid": "42fdc61a-4a25-4316-90c9-60209875d208"
},
{
"room": "678",
"status": "pending",
"uuid": "7bedc115-20ed-4c3e-9cd7-7fed0520f4df"
}
],
"status": "pending"
}
}
Es in einer einzigen Aktualisierungsanforderung nicht möglich ist, weil Dynamo nicht in der Lage sein, zu „finden“ der richtigen Index in der 'Item.rooms' Array für dich. Die einzige Möglichkeit, dies zu ermöglichen, wäre, dass Sie 'Item.rooms' von einem Array zu einem Objekt ändern, bei dem jeder Schlüssel die Uuid eines Raumes ist. Dann könnten Sie einen Aktualisierungsausdruck von etwas wie 'SET rooms. # RoomUUID.status =: roomStatus' verwenden. – idbehold
Ok, kannst du das als deine Antwort einreichen? Scheint, ich muss Unterstreich verwenden, um mir zu helfen. – user1322092