如何通过复合键获取项目?

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

HibernateTemplate 复合键获取值 null

Spring Boot:如何使用复合键创建实体

如何在 Java 中的 Cassandra 中注释/使用复合分区键?

EntityFramework - 包含复合键的查询

通过 PhpMyAdmin 的复合外键约束?