Woo*_*Kim 4 node.js amazon-dynamodb
我想用以下逻辑实现DynamoDB Scan:
扫描 - >过滤(布尔值为true或false) - >限制(用于分页)
但是,我只能用这个逻辑实现Scan:
扫描 - >限制(用于分页) - >过滤(布尔值为true或false)
我怎样才能做到这一点?
下面是我编写的实现第二个扫描逻辑的示例:
var parameters = {
TableName: this.tableName,
Limit: queryStatement.limit
};
if ('role' in queryStatement) {
parameters.FilterExpression = '#role = :role';
parameters.ExpressionAttributeNames = {
'#role': 'role'
};
parameters.ExpressionAttributeValues = {
':role': queryStatement.role
};
}
if ('startKey' in queryStatement) {
parameters.ExclusiveStartKey = { id: queryStatement.startKey};
}
this.documentClient.scan(parameters, (errorResult, result) => {
if (errorResult) {
errorResult._status = 500;
return reject(errorResult);
}
return resolve(result);
});
Run Code Online (Sandbox Code Playgroud)
这个代码就像第二个一样.
扫描 - >限制 - >过滤
该DynamoDB LIMIT工作方式下面提到(在您的文章即第二种方法)设计.由于它的设计工作,没有解决方案.
LastEvaluatedKey应该用于获取后续扫描的数据.
扫描 - >限制(用于分页) - >过滤(布尔值为true或false)
在请求中,将Limit参数设置为您希望DynamoDB在返回结果之前处理的项目数.
在响应中,DynamoDB返回Limit值范围内的所有匹配结果.例如,如果发出限制值为6且没有过滤器表达式的查询或扫描请求,DynamoDB将返回表中与请求中指定的键条件匹配的前六项(或仅返回前六项)扫描没有过滤器的情况).如果还提供FilterExpression值,DynamoDB将返回前六个中与过滤器要求匹配的项目(返回的结果数将小于或等于6).
对于查询或扫描操作,如果操作未返回表中的所有匹配项,DynamoDB可能会返回LastEvaluatedKey值.要获取匹配项的完整计数,请从上一个请求中获取LastEvaluatedKey值,并将其用作下一个请求中的ExclusiveStartKey值.重复此操作,直到DynamoDB不再返回LastEvaluatedKey值.
使用--max-items=2
而不是--limit=2
, max-items 将在过滤后进行限制。
示例查询max-items
:
aws dynamodb query --table-name=limitTest --key-condition-expression="gsikey=:hash AND gsisort>=:sort" --expression-attribute-values '{ ":hash":{"S":"1"}, ":sort":{"S":"1"}, ":levels":{"N":"10"}}' --filter-expression="levels >= :levels" --scan-index-forward --max-items=2 --projection-expression "levels,key1" --index-name=gsikey-gsisort-index
Run Code Online (Sandbox Code Playgroud)
示例查询limit
:
aws dynamodb query --table-name=limitTest --key-condition-expression="gsikey=:hash AND gsisort>=:sort" --expression-attribute-values '{ ":hash":{"S":"1"}, ":sort":{"S":"1"}, ":levels":{"N":"10"}}' --filter-expression="levels >= :levels" --scan-index-forward --limit=2 --projection-expression "levels,key1" --index-name=gsikey-gsisort-index
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3838 次 |
最近记录: |