使用Java更新DynamoDB中的项目

Chi*_*ani 3 java amazon-dynamodb aws-lambda

我要更新特定项目(行中只有一个数据),

如何更新DynamoDB中的项目?

login_id是我的主键。我传递了login_id和其他布尔值。我想根据该登录ID将布尔值设置为true。

我怎样才能做到这一点?

我尝试了这段代码。

LinkedHashMap inputHashMap = (LinkedHashMap) input;

        login_id = (String) inputHashMap.get("login_id");
        isUserVerified = (Boolean) inputHashMap.get("isUserVerified");

        DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient());

        Table tableUserDetails = dynamoDB.getTable(USER_DETAILS_TABLE);
        Table tableOtpStatus = dynamoDB.getTable(OTP_DETAILS_TABLE);

        UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("login_id", login_id);

        try{

            UpdateItemOutcome outcome = tableUserDetails.updateItem(updateItemSpec);
            System.out.println("UpdateItem succeeded:\n" + outcome.getItem().toJSONPretty());
        }catch(Exception e){
            System.err.println(e.getMessage());
        }
Run Code Online (Sandbox Code Playgroud)

在执行以上代码时,出现以下异常。

The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException;
Run Code Online (Sandbox Code Playgroud)

Ben*_*uer 5

看起来您缺少更新表达式。假设isUserVerified是主键的一部分,则应类似以下内容:

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
      .withPrimaryKey("login_id", login_id)
      .withUpdateExpression("set isUserVerified = :val")
      .withValueMap(new ValueMap()
         .withBoolean(":val", true));
Run Code Online (Sandbox Code Playgroud)

如果isUserVerified不是密钥的一部分,则只需将其从.withPrimaryKey()语句中删除。

你可以在这里找到更多。