【发布时间】: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