【发布时间】:2020-11-17 22:19:01
【问题描述】:
我想使用以下逻辑实现 DynamoDB 扫描:
扫描 -> 过滤(布尔值 true 或 false) -> 限制(用于分页)
但是,我只能用这个逻辑实现扫描:
扫描 -> 限制(用于分页)-> 过滤(布尔值 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);
});
此代码与第二个代码一样。
扫描 -> 限制 -> 过滤
【问题讨论】:
-
您能告诉我您是如何解决 GSI 问题的吗?
-
哦,我制作了 GSI,它总是返回没有过滤器的过滤值。因此,扫描 -> 限制 -> 过滤正在改变 GSI 扫描(与过滤器相同的效果)-> 限制。 GSI 可以做任何事情,但要小心,GSI 数据不能同步更新。因此,如果您处理实时数据,这将不是一个正确的答案。
-
@Wooyoung Tyler Kim 如果您在此处发布最终解决方案作为答案,那就太好了。看起来很多人都很好奇。
-
@Gem 是的,原文在公司里,所以我会尽快单独写这部分。