DynamoDB / Dynalite查询不返回nodejs

时间:2015-12-21 15:58:57

标签: amazon-dynamodb

我正在尝试学习AWS DynamoDB并遇到一个看似简单的问题,我无法弄清楚。

我正在本地运行nodejs上的Dynalite。 错误如下;

{[ValidationException:必须在请求中指定KeyConditions或KeyConditionExpression参数。]   message:'必须在请求中指定KeyConditions或KeyConditionExpression参数。',   代码:'ValidationException',   时间:2015年12月21日星期一17:31:47 GMT + 0200(SAST),   requestId:'RHDFVDXQTI0VZUIRJSLGRZXJFQJQYWGJOGS0B4MUDSX3H3JSVWNR',   statusCode:400,   可重试:false,   retryDelay:0}

我的表创建如下(为简洁起见,代码被删除);

var params = {
    TableName : "test",
    KeySchema: [       
      { AttributeName: "email", KeyType: "HASH" },  
      { AttributeName: "date", KeyType: "RANGE" }
    ],
    AttributeDefinitions: [       
        { AttributeName: "email", AttributeType: "S" },
        { AttributeName: "date", AttributeType: "N" }
    ],
    ProvisionedThroughput: {       
        ReadCapacityUnits: 1, 
        WriteCapacityUnits: 1
    }
}

dynamodb.createTable(params, function(err, data) {
    if (err) { console.log(JSON.stringify(err, null, 2)) }
    } else   { console.log(JSON.stringify(data, null, 2)) }
})

测试数据加载以下内容;

var params = { 
    TableName: 'test',
        Item: {
            "email":   lowerCasedEmail,
            "date":    date,                                                
            "amount":  amount,
        }
    }

  dynamodbDoc.put(params, function(err, data) {
     if (err){
       console.log(JSON.stringify(err, null, 2))
     } else {
        console.log(JSON.stringify(data, null, 2))
     }
  })

然后失败的查询如下;

var params = {
    TableName: "test",    
    KeyConditionExpression: "email = :testmail",
    ExpressionAttributeValues: {
      ":testmail": "rik@test.com"
    }
}

dynamodbDoc.query(params, function(err, data) {
   if (err) { console.log(err) } 
   else {
      if (Object.keys(data).length === 0) {
             console.log('Nothing found.')
      } else { console.log(data) }
   }
 })

1 个答案:

答案 0 :(得分:2)

我发现了问题。 Dynalite无法正确处理KeyConditionExpression。