使用KeyConditionExpression进行dynamodb查询的问题

时间:2015-07-04 10:14:57

标签: node.js amazon-dynamodb aws-sdk

尝试使用nodejs sdk根据dynamodb api document使用KeyConditionExpression。 nodejs SDK不支持KeyConditionExpression。

这就是我做的事情

创建一个包含哈希和范围的表。

Table : TABLE1
Hash Attribute Name : Provider ( String) 
Range Attribute Key : ScheduledEndTime ( Number ) // In Milli Seconds

这是触发Dynamo数据库查询的有效负载:

{
  TableName: 'TABLE1',
  ConsistentRead: true,
  Select: "ALL_ATTRIBUTES",
  KeyConditionExpression: 'Provider = :v_provider AND ScheduledEndTime > :v_scheduledEndTime',
  ExpressionAttributeValues: {
    ":v_provider": {
      S: "amazon"
    },
    ":v_scheduledEndTime": {
      N: "10"
    }
  }
}; 

但是,上面的有效负载抛出错误

[Error: MultipleValidationErrors: There were 2 validation errors:
* MissingRequiredParameter: Missing required key 'KeyConditions' in params
* UnexpectedParameter: Unexpected key 'KeyConditionExpression' found in    params]
[Error: MultipleValidationErrors: There were 2 validation errors:
* MissingRequiredParameter: Missing required key 'KeyConditions' in params
* UnexpectedParameter: Unexpected key 'KeyConditionExpression' found in params]

根据文档,如果我们使用KeyConditionExpression,SDK不应该考虑KeyConditions键,我也尝试使用最新的nodejs sdk。 有效载荷模式有什么问题吗?

1 个答案:

答案 0 :(得分:4)

我认为某些地方(特别是Lambda)默认情况下会为您提供错误的API版本。当我遇到这个问题时,用以下内容替换我的dynamo实例解决了问题:

var AWS = require("aws-sdk");
var dynamo = new AWS.DynamoDB({apiVersion: '2012-08-10'});