我使用amazon dynamoDb来存储我的数据。我创建了像这样的数据库
分区键:userid,类型:字符串
排序键:得分,类型:数字
我插入了一些行。
manaf1 | 100
manaf2 | 500
manaf1 | 200
manaf1 | 600
我需要获得max&所选用户的最低分数。这是我的代码
var AWS = require("aws-sdk");
AWS.config.update({
region: "myRegion"
});
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
"TableName": "tableName",
"KeyConditionExpression": "#userid = :userid ",
"ExpressionAttributeNames": {
"#userid": "userid"
},
"ExpressionAttributeValues": {
":userid": {
"S": "manaf1"
}
}
};
docClient.query(params, function (err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Query succeeded.");
}
});
但是在运行此代码时出现错误。
Unable to query. Error: {
"message": "One or more parameter values were invalid: Condition parameter type does not match schema type",
"code": "ValidationException",
"time": "2016-08-31T06:12:13.825Z",
"requestId": "S1DFFJNDNVV4KQNSO5AEDASFMVJF66Q9ASHDFUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 0
}
我需要像
这样的输出manaf1最低分= 100
manaf1最高分= 600
答案 0 :(得分:6)
请更改ExpressionAttributeValues,如下所述。这应该可以解决错误。
ExpressionAttributeValues : {
':userid' : 'manaf1'
}
要按降序对分数进行排序,可以将ScanIndexForward设置为false。
var params = {
TableName : table,
KeyConditionExpression : 'userid = :userid',
ExpressionAttributeValues : {
':userid' : 'manaf1'
},
ScanIndexForward: false
};
如果ScanIndexForward为true,DynamoDB将按顺序返回结果 存储它们(按排序键值)。这是默认值 行为。如果ScanIndexForward为false,则DynamoDB将读取结果 按排序键值反向排序,然后将结果返回给 客户端。
类型:布尔值
要按升序对分数进行排序,可以将ScanIndexForward设置为true。
使用 ScanIndexForward ,您可以将MIN和MAX得分记录作为结果中的第一条记录。