gpt4 book ai didi

node.js - DynamoDB BatchGet 总是给出 "The provided key element does not match the schema"

转载 作者:行者123 更新时间:2023-12-05 06:10:20 25 4
gpt4 key购买 nike

所以我现在被 dynamo db 的 batchGet 操作困住了一段时间。

这是我的表定义(在无服务器中)

Resources:
MyTable:
Type: AWS::DynamoDB::Table
DeletionPolicy: Retain
Properties:
TableName: MyTable
TimeToLiveSpecification:
AttributeName: ttl
Enabled: true
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: myId
AttributeType: S
- AttributeName: otherId
AttributeType: S
KeySchema:
- AttributeName: myId
KeyType: HASH
GlobalSecondaryIndexes:
- IndexName: otherIdIndex
KeySchema:
- AttributeName: myId
KeyType: HASH
- AttributeName: otherId
KeyType: RANGE
Projection:
ProjectionType: ALL

这是我在我的函数中执行 batchGet 的方法。

await getClient().batchGet({
RequestItems: {
'MyTable': {
Keys: [
{'myId': { 'S': 'z12345' }},
{'myId': { 'S': 'z12346' }},
],
ProjectionExpression: 'myId, otherId',
},
},
}).promise();

但是,出于某种原因,我只得到一个异常提供的关键元素与模式不匹配我错过了什么吗?

提前致谢!


编辑

深入搜索后,我从其他帖子 (https://stackoverflow.com/a/32238597/969645) 中偶然发现了这个答案。我刚刚意识到我正在使用更高级别的 SDK,所以我必须像这样更改我的代码(不定义类型):

await getClient().batchGet({
RequestItems: {
'MyTable': {
Keys: [
{'myId': 'z12345'},
{'myId': 'z12346'},
],
ProjectionExpression: 'myId, otherId',
},
},
}).promise();

现在 The provided key element does not match the schema 错误消失了,但我仍然以 Internal server error 结束,不幸的是,它没有提供任何线索日志。有什么想法吗?

最佳答案

BatchGet - 使用主键获取项目。在您的情况下,PrimaryKey 不是分区键,而是分区键和排序键。

Pk = 分区键和排序键

你的代码应该是

await getClient().batchGet({
RequestItems: {
'MyTable': {
Keys: [
{'myId': 'z12345', 'otherId': 'whatever value'},
{'myId': 'z12346', 'otherId': 'whatever value'},
],
ProjectionExpression: 'myId, otherId',
},
},
}).promise();

重要的是要理解唯一标识符(又名 SQL id)是在 dynamo 中通过使用分区 + 排序键定义的

关于node.js - DynamoDB BatchGet 总是给出 "The provided key element does not match the schema",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64463713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com