gpt4 book ai didi

java - dynamoDb - 如果没有类似的项目已添加到表中,则添加新项目

转载 作者:行者123 更新时间:2023-12-01 09:55:03 25 4
gpt4 key购买 nike

使用 dynamoDb 的 DynamoDBMapper 我需要执行以下操作:
1. 检查Follower表中是否已经添加了已知leaderId和userId的Follower。
2. 如果找到这样的关注者 - 将其状态更改为“ACTIVE”
3. 如果没有找到这样的关注者 - 使用给定的 LeaderId/followerId 存储一个新的关注者并声明“ACTIVE”

当我们使用状态来管理工作流程时,关注者的状态将在整个应用程序中使用
(我们尽量不删除数据库中的任何数据)。

简化的“Follower”类:

public class Follower {

@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
private String id;

private String leaderId;
private String followerId;
private String state;
}

我目前的解决方案是 1.使用DynamoDBMapper加载满足给定leaderID/followerId参数的Follower列表 2.如果没有结果 - 我们生成一个新的追随者,否则我们更新现有追随者的状态

但是,我希望存在一种更优雅的“一次 DynamoDBMapper 调用”解决方案。

public void follow(String leaderId, String followerId) {
Follower follower = findFollower(leaderId, followerId);

if(follower == null){
follower = new Follower();
follower.setLeaderId(leaderId);
follower.setFollowerId(followerId);
} else {
follower.getBase().setState("ACTIVE");
}

getDbMapper().save(follower);
}

最佳答案

您可以使用 DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES 来完成此操作。

我之前也遇到过同样的问题。我可以使用下面的函数解决它。

/**
* It's either save or update if the record is exist using param Follower data
*
* @param Follower object of the follower data
*/
private static void saveOrUpdateAccountOperation(Follower followerData) {
AmazonDynamoDBClient amazonDynamoDBClient;
if (CognitoSyncClientManager.getInstance().isUserLogin()) {
amazonDynamoDBClient = new AmazonDynamoDBClient(CognitoSyncClientManager.getInstance().getCredentialsProvider());
} else {
amazonDynamoDBClient = new AmazonDynamoDBClient(AWSMobileClient.defaultMobileClient().getIdentityManager().getCredentialsProvider());
}
// UPDATE_SKIP_NULL_ATTRIBUTES is similar to UPDATE, except that it ignores any null value attribute(s) and will NOT remove them from that item in DynamoDB.
DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(amazonDynamoDBClient,
new DynamoDBMapperConfig(DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES));
// create or update the existing record
dynamoDBMapper.save(followerData);
}

您只需将 Follower 对象传递给此函数,它就会处理您的所有三个条件。

  1. 如果您的 Follower 对象leaderId 和 userId 不存在,那么它将创建它并添加具有默认值的所有其他属性。
  2. 如果找到给定的关注者,请确保您的关注者类状态属性包含值“ACTIVE”,它只会更新该属性。

谢谢。

关于java - dynamoDb - 如果没有类似的项目已添加到表中,则添加新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com