database - DynamoDB 查找最近的整数键

标签 database amazon-web-services amazon-dynamodb

我有一个 dynamodb 表,其中哈希为 unix 时间,主键为名称

如果找不到准确的时间,有没有办法获得最接近的 Unix 时间?

因此,如果我正在搜索 (123343445, john),它将返回 (123343445, john) 或下一个最接近的值,可能是 (123343446, john)

理想情况下,我不想检查某个项目,然后向上或向下迭代,直到找到匹配的时间,因为我不知道时间间隔是多少,并且在大多数情况下它不会相等。

最佳答案

这里是nodejs的例子,其他语言也类似。代码可能并不完美,但伪代码是完美的! :)

const params = {
    TableName: MyTableName,
    KeyConditionExpression: '#pk = :pk AND #sk >= :sk',
    Limit: 1,
    ScanIndexForward: true,
    ExpressionAttributeNames: {
      '#pk': 'name',
      '#sk': 'timestamp',
    },
    ExpressionAttributeValues: {
      ':pk': 'john', # may use some variable
      ':sk': '123343445', # may use some variable
    },
};

# /!\ Not sure about the exact syntax
new AWS.DynamoDB.DocumentClient()
  .query(params).promise()
  .then((item) => { console.log(item); });

请注意:

  • KeyConditionExpression 将返回给定时间戳 (123343445) 之后的所有项目,
  • ScanIndexForward: true 将从您的时间戳开始
  • Limit: 1 将仅返回第一个匹配项。

您可以使用其他语言或 aws-cli,查找这些参数,它们应该可用。

如果您愿意,您可以对索引执行类似的查询,您所要做的就是在 params 中添加 IndexName: 'STRING_VALUE',

关于database - DynamoDB 查找最近的整数键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49089466/

相关文章:

amazon-web-services - DynamoDB 本地二级索引与全局二级索引

amazon-web-services - AWS CloudFormation 是否支持 ECS 任务放置策略?

elasticsearch - 带有 Elasticsearch 的 NoSQL(Mongo、DynaoDB)与单个 Elasticsearch

mysql - 将一对多转换为行

database - 我应该将密码编码为什么?

javascript - 将 Node.js 文件推送到 AWS

android - AppSync 和推送通知

node.js - 用 nodejs 编写的 AWS Lambda 函数没有更新我的 DynamoDB

database - Tableview 在编辑时更新数据库

node.js - Firebase 堆栈 "Error: too many index entries for entity"