ホーム>source

ローカルの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が初めてなので、これに関する提案はありますか。

あなたの答え
  • 解決した方法 # 1

    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());
    }
    
    

    これを試してください、これはあなたのために働くと思います

  • 解決した方法 # 2

    DynamoDBドキュメントから:

    The Query operation enables you to query a table or a secondary index. You must provide a partition key value and an equality condition.

    受け取ったエラーメッセージは、 school  テーブルのパーティションキーではありません。これを修正するには

    テーブル定義を変更して、 school  パーティションキーまたは

    クエリの代わりにスキャンを使用します。

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Pythonを使用してXML要素を複製せずに挿入します