如何通过复合键获取项目?
如何通过复合键获取项目?
const dynamoDB = new AWS.DynamoDB.DocumentClient();
var params = {};
params.TableName = 'StockDailyCandles';
var key = { 'symbol': 'AAPL', 'datetime': '640590008898' }; // 举例的时间戳
params.Key = key;
var x = await dynamoDB.get(params).promise();
return (x.Item ? true : false);
该表的复合主键是 symbol 和 "datetime"(仅为时间戳)。在 dynamodb 中,这两列都设置为字符串。
我收到的错误是:提供的键元素与模式不匹配。
问题的原因是希望通过复合键(composite key)来获取数据项,但是没有找到相应的解决方法。解决方法是使用AWS SDK和DynamoDB的DocumentClient来创建一个getItem函数,然后通过指定表名和复合键的值来获取数据项。以下是整理后的文章:
如何通过复合键获取数据项?
有时候我们希望通过复合键来获取DynamoDB中的数据项,但是我们可能不知道如何实现。下面的代码示例展示了如何通过复合键来获取数据项。
首先,我们需要使用AWS SDK,确保已经安装并配置了AWS SDK。然后,我们需要使用DynamoDB的DocumentClient来创建一个getItem函数。
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.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)));
在上述代码中,我们首先导入AWS SDK并配置所需的区域。然后,我们创建了一个DocumentClient实例,该实例允许我们与DynamoDB进行交互。
接下来,我们定义了一个名为getItem的异步函数。在函数中,我们创建了一个params对象,其中包含了表名和复合键的值。这里的表名为"RetailDatabase",而复合键的值分别为"jim.bob.com"和"metadata"。
然后,我们使用DocumentClient的get方法来获取数据项。通过使用await关键字,我们确保在获取数据项完成之前,程序会等待响应返回。
最后,我们通过调用getItem函数来获取数据项,并使用.then方法来处理成功的响应,使用.catch方法来处理错误的响应。在成功的响应中,我们输出获取到的数据项。
通过按照以上步骤,我们可以通过复合键来获取DynamoDB中的数据项。