【发布时间】:2020-09-01 17:17:42
【问题描述】:
创建一个状态为 pending 和 generated-token 的文档,然后发送邮件
在发送邮件后立即通过生成的令牌值检索文档并将先前的状态更改为未验证。
即使为了更新文档状态,首先检索现有文档然后只更新它,最终仍然会为两种状态创建两个不同的文档。
@Document
public class VerificationInfo {
private LoginInfo user;
private String token;
private String verificationStatus = VerificationStatus.PENDING.getVerificationStatus();
}
道服务
public void updateStatus(VerificationInfo verificationToken, String status) {
VerificationInfo vt = verificationRepository.findByToken(verificationToken.getToken()).get(0);
vt.setVerificationStatus(status);
verificationRepository.save(vt);
}
存储库
@Repository
public interface VerificationRepository extends MongoRepository<VerificationInfo, String> {
List<VerificationInfo> findByToken(String token);
List<VerificationInfo> findByUser(LoginInfo user);
}
数据库条目
{ "_id" : ObjectId("5f4e7486664e197f3d745b17"), "token" : "c82907b7-e13e-484d-89cf-92ea394b6f6d", "verificationStatus" : "pending", "_class" : "com.models.VerificationInfo" }
{ "_id" : ObjectId("5f4e748b664e197f3d745b18"), "token" : "c82907b7-e13e-484d-89cf-92ea394b6f6d", "verificationStatus" : "unverified", "_class" : "com.models.VerificationInfo" }
【问题讨论】:
-
updateStatus() 中的状态打印是什么
-
@varman 设置为未验证,仅打印为未验证。即使在 DB 中也可以保存正确的值,但唯一的问题是创建新文档而不是更新现有文档
-
你没有唯一的id吗?
-
您的文档是否使用任何 id 进行了更新?
-
默认情况下 mongodb 正在创建 _id。否则它需要具有唯一性吗?
标签: java mongodb spring-boot spring-data spring-data-mongodb