Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Mono更新具有新值的MongoDB文档?(科特林)_Mongodb_Kotlin_Project Reactor - Fatal编程技术网

如何使用Mono更新具有新值的MongoDB文档?(科特林)

如何使用Mono更新具有新值的MongoDB文档?(科特林),mongodb,kotlin,project-reactor,Mongodb,Kotlin,Project Reactor,因此,上下文是我需要更新单个文档中的值,我有一个Mono,参数对象包含诸如username(通过唯一的username找到正确的用户)和amount值之类的值 问题是这个值(由于我的应用程序的其他组件)是我需要增加/减少用户余额的值,而不是传递一个新的余额。我打算使用两个Mono来实现这一点,其中一个找到用户,然后将其与另一个Mono和入站请求相结合,然后我可以执行一个简单的求和(即balance+changeRequest.amount),然后将其返回到文档数据库 override fun i

因此,上下文是我需要更新单个文档中的值,我有一个Mono,参数对象包含诸如username(通过唯一的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):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()))

}