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



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

分区键:userid,类型:String

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

我插入了一些行

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 maximum score = 600

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

请按如下所述更改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你可以得到最小和最大分数记录作为结果的第一条记录。

相关内容

  • 没有找到相关文章

最新更新