使用node.js sdk从dynamoDb获取最小值和最大值

Abd*_*naf 4 amazon-web-services node.js amazon-dynamodb aws-sdk

我使用amazon dynamoDb来存储我的数据.我创建了这样的数据库

分区键:userid,Type:String

排序键:得分,类型:数字

我插入了一些行.

manaf1 | 100

manaf2 | 500

manaf1 | 200

manaf1 | 600

我需要获得所选用户的最高和最低分数.这是我的代码

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.");
    }
});
Run Code Online (Sandbox Code Playgroud)

但是在运行此代码时出现错误.

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
}
Run Code Online (Sandbox Code Playgroud)

我需要输出像

manaf1最低分= 100

manaf1最高分= 600

  1. 是否可以从dynamoDb获取最大或最小的数字字段?
  2. 这段代码有什么问题?

not*_*est 6

请更改ExpressionAttributeValues,如下所述.这应该可以解决错误.

ExpressionAttributeValues : {
        ':userid' : 'manaf1'        
    }
Run Code Online (Sandbox Code Playgroud)

要按降序对分数进行排序,可以将ScanIndexForward设置为false.

var params = {
    TableName : table,
    KeyConditionExpression : 'userid = :userid',
    ExpressionAttributeValues : {
        ':userid' : 'manaf1'        
    },
    ScanIndexForward: false
};
Run Code Online (Sandbox Code Playgroud)

如果ScanIndexForward为true,DynamoDB将按照存储顺序返回结果(按排序键值).这是默认行为.如果ScanIndexForward为false,则DynamoDB按排序键值以相反顺序读取结果,然后将结果返回给客户端.

类型:布尔值

要按升序对分数进行排序,可以将ScanIndexForward设置为true.

使用ScanIndexForward,您可以将MIN和MAX得分记录作为结果中的第一条记录.