我想从 dynamo db 表中获取所有项目。我在 java 中编写了一个查询,如下所示,它可以工作。但问题是它不会将所有列添加到 AttributeValue Map。它只有第一列(键)。所以我在这里做的是在循环中按键搜索每个项目。因此,如果您的表在我搜索循环中的每个项目时具有数百万个数据,则效率不高。我能做些什么来避免这种情况?注意:“名称”是表中的第一列。(首要的关键)
我试图得到'count',就像我喜欢'name'一样,但它没有为'count'返回任何东西,而是返回null。
Table table = dynamoDb.getTable(DYNAMODB_TABLE_NAME);
ScanRequest scanRequest = new ScanRequest(DYNAMODB_TABLE_NAME);
ArrayList<DeviceResponse>deviceResponses=new ArrayList<>();
Map<String, AttributeValue> exclusiveStartKey = null;
do {
final ScanResult scanResult = client.scan(scanRequest);
List<Map<String, AttributeValue>> items = scanResult.getItems();
for (int i = 0; i < items.size(); i++) {
Map<String, AttributeValue> map = items.get(i);
AttributeValue value = map.get("name");
String name = value.getS();
Item item = table.getItem("name", name); //Searching item
int count = item.getInt("count"); //getting count from item
DeviceResponse deviceResponse = new DeviceResponse();
deviceResponse.setName(name);
deviceResponse.setCount(count);
deviceResponses.add(deviceResponse);
}
exclusiveStartKey = scanResult.getLastEvaluatedKey();
// Reusing same request object, just setting the start key
scanRequest.setExclusiveStartKey(exclusiveStartKey);
} while(exclusiveStartKey != null);
return deviceResponses;
茅侃侃
相关分类