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,没有任何类型的信息,到处都是省略号。这没有帮助。