Java 使用spring数据mongodb和kotlin更新对象不起作用

Java 使用spring数据mongodb和kotlin更新对象不起作用,java,spring,kotlin,spring-data-mongodb,spring-webflux,Java,Spring,Kotlin,Spring Data Mongodb,Spring Webflux,我有以下请求处理程序 fun x(req: ServerRequest) = req.toMono() .flatMap { ... val oldest = myRepository.findOldest(...) // this is the object I want to modify ... val v= anotherMongoReactiveRepository.save(Y(...)) // this sav

我有以下请求处理程序

fun x(req: ServerRequest) = req.toMono()
    .flatMap {
        ...
        val oldest = myRepository.findOldest(...) // this is the object I want to modify
        ...
        val v= anotherMongoReactiveRepository.save(Y(...)) // this saves successfully
        myRepository.save(oldest.copy(
                remaining = (oldest.remaining - 1)
        )) // this is not saved
        ok().body(...)
    }
以及下面的mongodb反应存储库

@Repository
interface MyRepository : ReactiveMongoRepository<X, String>, ... {
}
@存储库
接口MyRepository:ReactiveMongoRepository。。。{
}

问题是执行
save()
方法后,对象中没有任何更改。我设法解决了
save().block()
的问题,但我不知道为什么在另一个存储库上的第一次保存可以工作,而这一次不行。为什么需要这个
block()

在有人订阅被动发布服务器之前,什么都不会发生。这就是为什么在使用block()时它开始工作的原因。如果需要调用DB并在另一个DB请求中使用结果,请使用Mono/Flux运算符,如map()、flatMap()、,。。。构建一个包含所有所需操作的管道,然后返回生成的Mono/Flux作为控制器的响应。Spring将订阅Mono/Flux并返回请求。你不需要阻止它。不建议这样做(使用block()方法)

如何在Java中使用MongoDB反应式存储库的简短示例:

@GetMapping("/users")
public Mono<User> getPopulation() {
    return userRepository.findOldest()
            .flatMap(user -> {              // process the response from DB
                user.setTheOldest(true);
                return userRepository.save(user);
            })
            .map(user -> {...}); // another processing
}
@GetMapping(“/users”)
公共人口(){
返回userRepository.findOldest()
.flatMap(用户->{//处理来自DB的响应
user.setTheOldest(true);
返回userRepository.save(用户);
})
.map(用户->{…});//另一个处理
}

请使用更容易理解的内容改进您的代码片段
X
s和
Y
s,没有任何类型的信息,到处都是省略号。这没有帮助。