【问题标题】:How do I use a composite primary key with documentclient.batchWrite()?如何在 documentclient.batchWrite() 中使用复合主键?
【发布时间】:2020-12-14 20:55:55
【问题描述】:

我正在尝试在this documentation 之后进行批量删除。它给出了以下示例:

var params = {
  RequestItems: { /* required */
    '<TableName>': [
      {
        DeleteRequest: {
          Key: { /* required */
            '<AttributeName>': someValue /* "str" | 10 | true | false | null | [1, "a"] | {a: "b"} */,
            /* '<AttributeName>': ... */
          }
        },
        PutRequest: {
          Item: { /* required */
            '<AttributeName>': someValue /* "str" | 10 | true | false | null | [1, "a"] | {a: "b"} */,
            /* '<AttributeName>': ... */
          }
        }
      },
      /* more items */
    ],
    /* '<TableName>': ... */
  },
  ReturnConsumedCapacity: INDEXES | TOTAL | NONE,
  ReturnItemCollectionMetrics: SIZE | NONE
};
documentclient.batchWrite(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
  • Key — 必需 — (map) — 可序列化的 JavaScript 对象。有关受支持类型的信息,请参阅DynamoDB Data Model

进一步查看我发现的 DynamoDB 文档this parameter description

  • Key - 唯一标识项目的主键属性值映射。此映射中的每个条目都由一个属性名称和一个属性值组成。对于每个主键,您必须提供所有键属性。例如,对于简单的主键,您只需为分区键提供一个值。对于复合主键,您必须同时提供分区键和排序键的值。

我的表同时使用分区键和排序键,因此我必须使用复合键。我真的找不到这个请求的外观示例,我尝试按照上面文档中的示例进行操作,但它既不会引发错误,也不会删除所需的项目。

我已尝试使用第一个示例中的以下参数:

const params = {
    "RequestItems": {
        "table-name": [
            {
                "DeleteRequest": {
                    "Key": {
                        "partition-key-col-name": "partitionKeyValue",
                        "sort-key-col-name": "sortKeyValue"
                    }
                }
            },
            {
                "DeleteRequest": {
                    "Key": {
                        "partition-key-col-name": "partitionKeyValue",
                        "sort-key-col-name": "sortKeyValue"
                    }
                }
            }
        ]
    }
}

按照第二个示例中的参数格式进行第二次尝试:

const params = {
    "RequestItems": {
        "table-name": [
            {
                "DeleteRequest": {
                    "Key": {
                        "partition-key-col-name": {
                            "S": "partitionKeyValue"
                        },
                        "sort-key-col-name": {
                            "S": "sortKeyValue"
                        }
                    }
                }
            },
            {
                "DeleteRequest": {
                    "Key": {
                        "partition-key-col-name": {
                            "S": "partitionKeyValue"
                        },
                        "sort-key-col-name": {
                            "S": "sortKeyValue"
                        }
                    }
                }
            }
        ]
    }
}

我刚回来'UnprocessedItems'

{ UnprocessedItems: {} }

我哪里错了?

【问题讨论】:

  • 我相信你会使用documentclient的第一种方法。你是说什么都没有被记录?您的console.log 声明都没有发生?我看到你用 aws-lambda 标记了这个,那么 Lambda 日志中是否有超时消息或其他内容? Lambda 函数是否配置为在 VPC 中运行?
  • 谢谢马克。我从 documentclient.batchWrite 返回{ UnprocessedItems: {} }
  • 如果你得到 { UnprocessedItems: {} },那么这意味着你的代码工作正常,因为现在我为你做了 POC,它运行完美。
  • @AbdulMoeez 你是对的,代码运行良好!别的东西让我失望了。谢谢。

标签: javascript node.js amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

第一个示例中的参数确实有效,代码中的其他内容让我失望。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2018-07-29
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多