javascript - 如何删除 dynamodb 列表中的条目?

标签 javascript amazon-dynamodb aws-lambda

我有一个 lambda 函数,它充当具有最佳用户分数的表的触发器来处理排行榜表。

在我的排行榜表中,排序键是分数,玩家的名字是带有列表的单独条目,因为可能有不止一个玩家具有相同的分数。没关系。

所以当我添加一个播放器时:

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

这很好用。我想这样删除它:

var paramsOldEntry = {
                    "TableName": myTable,
                    "Key": {
                        "trackId": trackId,
                        "time": oldValue
                    },
                    "UpdateExpression": "DELETE players :playerToRemove",
                    "ExpressionAttributeValues": {
                        ":playerToRemove": [userId]
                    },
                    "ReturnValues": "ALL_NEW"
                }

但我得到:Invalid UpdateExpression: Incorrect operand type for operator or function;运算符:DELETE,操作数类型:LIST 错误。

players属性是一个列表,查询响应示例:

{
  "Items": [
    {
      "time": {
        "N": "99994"
      },
      "players": {
        "L": [
          {
            "S": "krystianPostman2"
          }
        ]
      },
      "trackId": {
        "S": "betaTrack001"
      }
    }
  ],
  "Count": 1,
  "ScannedCount": 1,
  "LastEvaluatedKey": {
    "time": {
      "N": "99994"
    },
    "trackId": {
      "S": "betaTrack001"
    }
  }
}

在使用 dynamodb 文档 API 时,我没有看到任何关于 SO 的问题会在 javascript 中提供有关此的任何详细信息。

最佳答案

DynamoDB API 没有根据值从 LIST 数据类型中删除值的选项。但是,如果您知道要删除的值的索引,则可以使用 REMOVE 从列表中删除该条目。

The DELETE action only supports Set data types.

UpdateExpression: 'REMOVE players[0]'

如果 LIST 将只有 name 属性,最好将其保存为 SET 而不是 LIST DynamoDB 数据类型。

创建集:-

var docClient = new AWS.DynamoDB.DocumentClient();
docClient.createSet( ["v1", "v2"]);

Deleting the values from SET using DELETE

关于javascript - 如何删除 dynamodb 列表中的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47072422/

相关文章:

ios - AWS DynamoDB 批量获取请求 - iOS

mysql - NodeJS 和 Mysql。在终止之前调用 connection.end() 是否可以接受?

javascript - 在请求中使用数据 URI 发送的 Canvas 图像在保存后损坏

javascript - 处理 CouchDB Map/Reduce JavaScript 函数上的 Eclipse 错误的最佳方法是什么?

javascript - 根据按键次数执行操作?

javascript - firebase中如何区分新旧元素?

amazon-dynamodb - 在分区键上使用 IN 运算符查询 dynamoDB

amazon-web-services - 在 DynamoDB 中将一张表复制到另一张表

node.js - AWS Lambda - 如何使用 context.identity.cognitoIdentityId 获取相关的 Cognito 用户池用户数据?

node.js - Alexa sdk询问提示