如何在 documentclient.batchWrite() 中使用复合主键?
Posted
技术标签:
【中文标题】如何在 documentclient.batchWrite() 中使用复合主键?【英文标题】:How do I use a composite primary key with 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 你是对的,代码运行良好!别的东西让我失望了。谢谢。
【参考方案1】:
第一个示例中的参数确实有效,代码中的其他内容让我失望。
【讨论】:
以上是关于如何在 documentclient.batchWrite() 中使用复合主键?的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?