Ich habe eine Lambda-Funktion, die als Trigger auf einer Tabelle mit den besten Ergebnissen von Benutzern für eine Leaderboard-Tabelle fungiert.Wie lösche Eintrag in dynamodb Liste?
In meiner Leaderboard-Tabelle ist der Sortierschlüssel der Punktestand, und der Name des Spielers ist ein separater Eintrag mit einer Liste, weil es möglich ist, dass es mehr als einen Spieler mit der gleichen Punktzahl gibt. Vergiss es.
Also, wenn ein Spieler das Hinzufügen ich tun:
var paramsNewEntry = {
"TableName": leaderboardTable,
"Key": {
"trackId": trackId,
"time": newValue
},
"UpdateExpression": "SET players = list_append(if_not_exists(players, :emptyList), :playersList),
"ExpressionAttributeValues": {
":playersList": [userId],
":emptyList":[]
},
"ReturnValues": "NONE"
};
Und das funktioniert gut. Ich wollte es auf diese Weise entfernen:
var paramsOldEntry = {
"TableName": myTable,
"Key": {
"trackId": trackId,
"time": oldValue
},
"UpdateExpression": "DELETE players :playerToRemove",
"ExpressionAttributeValues": {
":playerToRemove": [userId]
},
"ReturnValues": "ALL_NEW"
}
Aber ich bekomme: Invalid UpdateExpression: Incorrect operand type for operator or function; operator: DELETE, operand type: LIST
Fehler.
Das players
Attribut ist eine Liste, Abfrage-Antwort Beispiel:
{
"Items": [
{
"time": {
"N": "99994"
},
"players": {
"L": [
{
"S": "krystianPostman2"
}
]
},
"trackId": {
"S": "betaTrack001"
}
}
],
"Count": 1,
"ScannedCount": 1,
"LastEvaluatedKey": {
"time": {
"N": "99994"
},
"trackId": {
"S": "betaTrack001"
}
}
}
Ich habe keine Frage auf SO gesehen, die auf diese eventuell in Javascript bieten würde, wenn die DynamoDB Document API.
Sie benötigen nur einen Eintrag aus der Liste zu löschen, wenn es mehrere Werte hat? – notionquest
ist es egal, löschen Sie einfach den angegebenen Eintrag. Es ist immer eine Liste, wenn die Liste keine anderen Werte hat, nachdem ich die letzte entfernt habe, werde ich das in den Antwortdaten erkennen und den Eintrag vollständig entfernen. – Krystian
Ich würde mich über einen Kommentar freuen, wenn ich meine Frage ablehne. Warum der Downvote? War es unangemessen? Mangel an Beispielen/Codebeispielen? – Krystian