是否可以在DynamoDB中将结果与查询或扫描进行排序?
是否可以在DynamoDB中将结果与Query或Scan API进行排序?是否可以在DynamoDB中将结果与查询或扫描进行排序?
我需要知道DynamoDB是否有类似SQL查询中的[ORDER BY'field']?
谢谢。
不明确,但是,显然需要订购了许多现实世界的使用情况,并通过相应的Hash and Range Type Primary Key来建模:
在这种情况下,主键由两个属性。第一个 属性是散列属性,第二个属性是范围 属性。 Amazon DynamoDB在散列 主键属性和排序范围索引上创建一个无序散列索引,范围主要为 关键属性。 [重点矿山]
然后可以使用该范围内的索引经由Query API的RangeKeyCondition参数可选地请求项和向前指定或通过指数(即排序方向)的向后遍历ScanIndexForward参数。
更新:您可以通过属性与相同的方式local secondary index订购。
您可以使用排序键并应用query中的ScanIndexForward参数以升序或降序排序。在这里,我限制的项目回到1
var params = {
TableName: 'Events',
KeyConditionExpression: 'Organizer = :organizer',
Limit: 1,
ScanIndexForward: false, // true = ascending, false = descending
ExpressionAttributeValues: {
':organizer': organizer
}
};
docClient.query(params, function(err, data) {
if (err) {
console.log(JSON.stringify(err, null, 2));
} else {
console.log(JSON.stringify(data, null, 2));
}
});
问题是如果你想返回*所有*项目。从本质上讲,这意味着您必须创建一个新的虚拟列,将相同的值分配给所有行,在该列上创建一个GSI,然后调用查询而不是扫描。 – JHH 2016-06-02 08:42:47
如果您正在使用boto2,你必须在你的表中的列的一个排序关键字,您可以排序你在顺序或按相反的顺序检索什么他说:
:result = users.query_2(
account_type__eq='standard_user',
reverse=True)
如果您正在使用boto3,你必须对要由结果排序的列的排序键,你可以说你排序检索数据
记住boto3如果ScanIndexForward为true,那么DynamoDB会按照它们的存储顺序(按排序键值)返回结果。这是默认行为。如果ScanIndexForward为false,则DynamoDB会按排序键值的相反顺序读取结果,然后将结果返回给客户端。
使用ScanIndexForward(true为升序,false为降序),也可以使用Query Expression的setLimit值限制结果。
请在下面找到使用QueryPage查找单个记录的代码。
public void fetchLatestEvents() {
EventLogEntitySave entity = new EventLogEntitySave();
entity.setId("1C6RR7JM0JS100037_contentManagementActionComplete");
DynamoDBQueryExpression<EventLogEntitySave> queryExpression = new DynamoDBQueryExpression<EventLogEntitySave>().withHashKeyValues(entity);
queryExpression.setScanIndexForward(false);
queryExpression.withLimit(1);
queryExpression.setLimit(1);
List<EventLogEntitySave> result = dynamoDBMapper.queryPage(EventLogEntitySave.class, queryExpression).getResults();
System.out.println("size of records = "+result.size());
}
@DynamoDBTable(tableName = "PROD_EA_Test")
public class EventLogEntitySave {
@DynamoDBHashKey
private String id;
private String reconciliationProcessId;
private String vin;
private String source;
}
public class DynamoDBConfig {
@Bean
public AmazonDynamoDB amazonDynamoDB() {
String accesskey = "";
String secretkey = "";
//
// creating dynamo client
BasicAWSCredentials credentials = new BasicAWSCredentials(accesskey, secretkey);
AmazonDynamoDB dynamo = new AmazonDynamoDBClient(credentials);
dynamo.setRegion(Region.getRegion(Regions.US_WEST_2));
return dynamo;
}
@Bean
public DynamoDBMapper dynamoDBMapper() {
return new DynamoDBMapper(amazonDynamoDB());
}
}
使用ScanIndexForward(true为升序,false为降序) – 2017-12-18 18:19:19
的ScanIndexForward PARAM似乎只适用于[查询](http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Query.html),而不是[扫描](HTTP://文档。amazonwebservices.com/amazondynamodb/latest/developerguide/API_Scan.html)是否正确?如何使用Query返回表中所有项目的有序分页列表?扫描似乎是返回“*”的方式,但它似乎没有用于排序结果的参数。 – case2000 2012-02-15 20:20:22
我没有使用过这个功能,只是阅读了它,但是Query支持指定一个[Limit](限制)收到的结果数量,以及在达到限制时是否有更多与您的查询匹配的项目,您将收到一个_LastEvaluatedKey_,可用于执行另一个查询并继续检索结果。 – fernio 2014-12-10 15:59:26