我想从 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;
1 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
我试图得到“计数”,就像我喜欢“名字”一样
不,你没有。你得到的这段代码name:
AttributeValue value = map.get("name");
String name = value.getS();
不等同于您尝试获取的此代码count:
Item item = table.getItem("name", name); //Searching item
int count = item.getInt("count"); //getting count from item
您正在获取该name字段,然后出于某种原因对数据库执行另一个查询。所有属性都在Map<String, AttributeValue> map对象中。如果您想以与命名属性count相同的方式命名属性name,则代码如下:
AttributeValue value = map.get("count");
int count = value.getN();
或者只是像这样简化它:
int count = map.get("count").getN();
添加回答
举报
0/150
提交
取消