DynamoDB Descending Order获取记录

时间:2016-06-12 12:16:51

标签: amazon-dynamodb

我在收藏中有100条记录,

收藏品名称:'用户'

{
   "name":'senthilkumar',  
   "email":'senthily88@gmail.com',  //HashKey
   "age":21,
   "created":1465733486137,         //RangeKey-timestamp
}

我需要获取以下sql查询明智的记录

select * from users order by created desc limit 10

如何从 DynamoDB

获取上述查询格式记录

3 个答案:

答案 0 :(得分:12)

Dynamodb按范围键属性对结果进行排序。您可以将ScanIndexForward布尔参数设置为true以升序,或false降序。

资源:http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html

  

使用KeyConditionExpression参数提供特定值   对于分区键。 Query操作将返回所有   具有该分区键值的表或索引中的项。您可以   通过指定a,可以选择缩小Query操作的范围   在KeyConditionExpression中对键值和比较运算符进行排序。   您可以使用ScanIndexForward参数来获取结果   或按逆序排序。

答案 1 :(得分:2)

如果您想返回表中的 all 行,则不能使用查询API,因为该API要求您提供一个分区键值来过滤结果(即假设您的分区关键是name,您将只能使用查询API取回具有name =给定值(即name= senthilkumar

)的结果子集

如果要返回表中的所有行,则必须使用扫描API:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.Scan.html

请注意,所有结果将按范围键的值以升序排列。 您无法使用Scan API对内容进行反向排序。您将需要使用您编写代码时使用的任何语言来反转应用程序层中的结果集,以使结果上下颠倒。

扫描不能很好地扩展,并且如果表中包含具有唯一分区键的项目,则不能使用扫描来创建分页的反向排序解决方案

如果是这种情况,并且要从DynamoDB返回分页+反向排序的集,则需要重新考虑表的设计以及哪些列是分区键/范围键/索引,以便您可以使用查询API。

答案 2 :(得分:1)

要将我们的Json数据保存到DynamoDB,请使用put()

var Newparams = {
    TableName: this.SuffleTableName,
       Item: {
        "userId": /* YOUR PRIMARY KEY */,
        "addedAt": /* YOUR SORT KEY */,
        "status": /* Additional Datas */,
       }
}

使用Query()从DynamoDB获取数据

  QueryParam = {
       TableName: 'YOUR TABLE NAME HERE',
       IndexName: 'YOUR INDEX NAME HERE', //IF YOUR CREATED NEW INDEX
       KeyConditionExpression: "UserId = :UserId  ", //YOUR PRIMARY KEY
       ExpressionAttributeValues: {
          ":UserId": UserId,
       },
       ScanIndexForward: false, //DESC ORDER, Set 'true' if u want asc order 
       ExclusiveStartKey: LastEvalVal, //Pagination - LastEvaluatedKeyPair
       Limit: 10 //DataPerReq
    }