我的 mongoDB 中有 2 个集合:
1.users集合,包含用户电话号码以及是否经过验证?
{
_id: '12123',
phones: [
{
phoneNumber: '1234567890',
verified: false
}
]
}
2. verificationTokens 集合,其中包含由用户集合中的 id 映射为 userId 的验证码。
{
_id: '1111',
userId: '12123',
token: '4545'
}
我正在 Spring WebFlux 中创建一个端点来验证电话号码。端点接收userId和verificationCode。如果集合中的 token 与用户发送的 token 匹配,则将用户集合中的 verifyed 更新为 true。
我正在尝试编写一个由该端点调用的函数并进行所需的更改。
我尝试了以下代码,但验证状态未更新为 true。
public Mono<VerifyPhoneToken> verifyPhoneNumber(String id, String verificationCode) {
return verifyPhoneTokensRepository.findByUserId(id)
.flatMap(vpt -> {
if (verificationCode.equals(vpt.getToken())) {
usersRepository.findById(id)
.flatMap(user -> {
user.getPhones().get(0).setVerified(true);
return usersRepository.save(user);
});
return verifyPhoneTokensRepository.save(vpt);
}
return null;
});
}
另外,我想知道是否可以以更好的方式处理return null
。
最佳答案
我猜你的问题是当你调用usersRepository
时您没有处理返回,从而破坏了事件链。你应该尝试这样的事情:
public Mono<VerifyPhoneToken> verifyPhoneNumber(String id, String verificationCode) {
return verifyPhoneTokensRepository.findByUserId(id)
.flatMap(vpt -> {
if (verificationCode.equals(vpt.getToken())) {
return updateUser(id)
.then(verifyPhoneTokensRepository.save(vpt));
}
return Mono.empty();
});
}
private Mono<User> updateUser(String id) {
return usersRepository.findById(id)
.flatMap(user -> {
user.getPhones().get(0).setVerified(true);
return usersRepository.save(user);
});
}
使用 then
链式你的行动。也不回null
返回Mono<Void>
(Mono.empty())
关于java - 如何在 spring webflux 中的同一函数内更新多个 mongo 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57679770/