我在收藏中有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
获取上述查询格式记录答案 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
}