0

我在本地 dynamoDB 中创建了一个表。这些领域是,

id (N)
name (S)
school (S)
classname (S)

现在我想检索所有学校等于“xschool”的记录并打印。

尝试了下面的代码,但它在查询中给了我一个错误,

QuerySpec spec = new QuerySpec().withProjectionExpression("sid, classname, school")
            .withKeyConditionExpression("school = :v_school").
            withValueMap(new ValueMap().withString(":v_school", "abcschool"));

        ItemCollection<QueryOutcome> items = table.query(spec);

        Iterator<Item> iterator = items.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next().toJSONPretty());
        }

对此有任何建议,因为我是 dynamoDB 的新手。

4

2 回答 2

1

从 DynamoDB文档

Query 操作使您能够查询表或二级索引。您必须提供分区键值和相等条件。

您收到的错误消息意味着这school不是您的表的分区键。要解决此问题,您可以

  • 更改表定义,使其school成为分区键或
  • 使用扫描而不是查询。
于 2018-08-20T14:08:01.580 回答
0
AmazonDynamoDB dynamoDBClient = createClient();
DynamoDB dynamoDB = new DynamoDB(dynamoDBClient);        

String tableName = "student";
Table table = dynamoDB.getTable(tableName);

Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
expressionAttributeValues.put(":sc", schoolname);

ItemCollection<ScanOutcome> items = table.scan("school = :sc", // FilterExpression
    "sid, school, firstname, classname", // ProjectionExpression
    null, // ExpressionAttributeNames - not used in this example
    expressionAttributeValues);

Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next().toJSONPretty());
}

试试这个,我想这对你有用

于 2018-08-21T06:53:29.703 回答