2015-12-21 55 views
1

我想学习AWS DynamoDB并遇到一个看似简单的问题,我找不出来。DynamoDB/Dynalite查询不返回查询与nodejs

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

{[ValidationException:无论是KeyConditions或KeyConditionExpression参数必须在请求中指定的] 消息:“要么KeyConditions或KeyConditionExpression参数必须在请求中指定。”, 代码:“ValidationException”, 时间:星期一2015年12月21日17时31分47秒GMT + 0200(SAST), 的requestId: 'RHDFVDXQTI0VZUIRJSLGRZXJFQJQYWGJOGS0B4MUDSX3H3JSVWNR', 的StatusCode:400,可重试 :假, 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": "[email protected]" 
    } 
} 

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) } 
    } 
}) 

回答

2

我发现了这个问题。 Dynalite不能正确处理KeyConditionExpression。

+0

对于这个问题的状态,我正在关注[这个问题](https://github.com/mhart/dynalite/issues/24)。 –