如何使用Mono更新具有新值的MongoDB文档?(科特林)
因此,上下文是我需要更新单个文档中的值,我有一个Mono,参数对象包含诸如username(通过唯一的username找到正确的用户)和amount值之类的值 问题是这个值(由于我的应用程序的其他组件)是我需要增加/减少用户余额的值,而不是传递一个新的余额。我打算使用两个Mono来实现这一点,其中一个找到用户,然后将其与另一个Mono和入站请求相结合,然后我可以执行一个简单的求和(即balance+changeRequest.amount),然后将其返回到文档数据库如何使用Mono更新具有新值的MongoDB文档?(科特林),mongodb,kotlin,project-reactor,Mongodb,Kotlin,Project Reactor,因此,上下文是我需要更新单个文档中的值,我有一个Mono,参数对象包含诸如username(通过唯一的username找到正确的用户)和amount值之类的值 问题是这个值(由于我的应用程序的其他组件)是我需要增加/减少用户余额的值,而不是传递一个新的余额。我打算使用两个Mono来实现这一点,其中一个找到用户,然后将其与另一个Mono和入站请求相结合,然后我可以执行一个简单的求和(即balance+changeRequest.amount),然后将其返回到文档数据库 override fun i
override fun increaseBalance(changeRequest: Mono<ChangeBalanceRequestResource>): Mono<ChangeBalanceResponse> {
val changeAmount: Mono<Decimal128> = changeRequest.map { it.transactionAmount }
val user: Mono<User> = changeRequest.flatMap { rxUserRepository.findByUsername(it.username)
val newBalace = user.map {
val r = changeAmount.block()
it.balance = sumBalance(it.balance!!, r!!)
rxUserRepository.save(it)
}
.flatMap { it }
.map { it.balance!! }
return Mono.just(ChangeBalanceResponse("success", newBalace.block()!!))
}
覆盖乐趣增量平衡(变更请求:Mono):Mono{
val changeAmount:Mono=changeRequest.map{it.transactionAmount}
val user:Mono=changeRequest.flatMap{rxUserRepository.findByUsername(it.username)
val newBalace=user.map{
val r=变更金额。块()
it.balance=sumBalance(it.balance!!,r!!)
rxUserRepository.save(它)
}
.flatMap{it}
.map{it.balance!!}
返回Mono.just(ChangeBalancerResponse(“success”,newBalace.block()!!))
}
显然,我正试图以一种非阻塞的方式来实现这一点。如果可能/最佳的话,我也愿意只使用一个单声道。我也很感激我真正切碎了这个例子,并使用.block作为占位符来说明我正试图实现的目标
这是我的第一篇文章,因此任何关于如何更清晰地表达我的问题的提示都会很有用。以下是我在
Java
中如何做到这一点的方法(使用Double
而不是Decimal128
):
public Mono increaseBalance(Mono changeRequest){
Mono changeAmount=changeRequest.map(a->a.TransactionMount());
Mono user=changeRequest.map(a->a.username()).flatMap(RxUserRepository::findByUsername);
返回Mono.zip(changeamunt,user).flatMap(t2->{
Double changeamunt=t2.getT1();
User=t2.getT2();
//假设用户被链接
返回rxUserRepository.save(user.balance(sumBalance(changeamum,user.balance()));
}).map(res->newchangebalanceresponse(“success”,res.newBalance()))
}
Hey Prashant,刚想尝试一下这个解决方案,很有魅力
public Mono<ChangeBalanceResponse> increaseBalance(Mono<ChangeBalanceRequestResource> changeRequest) {
Mono<Double> changeAmount = changeRequest.map(a -> a.transactionAmount());
Mono<User> user = changeRequest.map(a -> a.username()).flatMap(RxUserRepository::findByUsername);
return Mono.zip(changeAmount,user).flatMap(t2 -> {
Double changeAmount = t2.getT1();
User user = t2.getT2();
//assumes User is chained
return rxUserRepository.save(user.balance(sumBalance(changeAmount,user.balance())));
}).map(res -> new ChangeBalanceResponse("success",res.newBalance()))
}