为了账号安全,请及时绑定邮箱和手机立即绑定

如何在java dynamodb查询中从AttributeValue Map获取多个值?

如何在java dynamodb查询中从AttributeValue Map获取多个值?

吃鸡游戏 2022-05-25 16:09:19
我想从 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();


查看完整回答
反对 回复 2022-05-25
  • 1 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信