【发布时间】:2020-06-25 08:56:45
【问题描述】:
所以上下文是我需要更新单个文档中的值,我有一个 Mono,参数 Object 包含诸如 username 之类的值(查找通过唯一用户名正确用户)和 amount 值。
问题是这个值(由于我的应用程序的其他组件)是我需要增加/减少用户余额的值,而不是传递新的余额。我打算使用两个 Mono 来执行此操作,其中一个找到用户,然后将其与入站请求结合到另一个 Mono,然后我可以在其中执行简单的求和(即 balance + changeRequest.amount) 然后将其返回到文档数据库。
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。我也很感激我真的扼杀了这个例子,并使用 .block 作为占位符来说明我想要实现的目标。
P.S 这是我的第一篇文章,所以任何关于如何更清楚地表达我的问题的提示都会很有用。
【问题讨论】:
标签: mongodb kotlin project-reactor