如何通过复合键获取项目?
Posted
技术标签:
【中文标题】如何通过复合键获取项目?【英文标题】:How can I get item by composite key? 【发布时间】:2021-02-16 13:53:31 【问题描述】:const dynamoDB = new AWS.DynamoDB.DocumentClient();
var params: any = ;
params.TableName = 'StockDailyCandles';
var key = 'symbol': 'AAPL', 'datetime': '640590008898' ; // example timestamp
params.Key = key;
var x = await dynamoDB.get(params).promise();
return (x.Item ? true : false);
表的复合键是符号和“日期时间”(它只是一个时间戳)。两列都在 dynamodb 中设置为字符串。
我收到的错误是:提供的关键元素与架构不匹配
【问题讨论】:
是的 - 它是.... 如果你传递一个字符串,dynamo 不期望一个 ISO 8601 字符串作为日期时间吗? see also 您能否使用 AWS 控制台中显示的表配置屏幕截图更新您的问题,该屏幕显示主键?没有看到很难确定这就是你的关键结构 @MarkMeyer 这似乎不是问题,即使提供值“test”也会导致相同的错误。 @MarkMeyer - 我将列类型设置为字符串。请参阅 OP 上的图像。 【参考方案1】:试试这样吧:
const AWS = require("aws-sdk");
AWS.config.update( region: "us-west-2" );
const documentClient = new AWS.DynamoDB.DocumentClient();
async function getItem()
const params =
TableName: "RetailDatabase",
Key:
pk: "jim.bob@somewhere.com",
sk: "metadata",
,
;
const response = await documentClient.get(params).promise();
return response;
getItem()
.then((data) =>
console.log("GetItem succeeded:", JSON.stringify(data, null, 2))
)
.catch((error) => console.error(JSON.stringify(error, null, 2)));
【讨论】:
以上是关于如何通过复合键获取项目?的主要内容,如果未能解决你的问题,请参考以下文章
使用复合键保存实体获取 ConversionNotSupportedException