我有以下模型:
class Person {
List<Address> addresses;
}
我使用ReactiveMongoRepository
来检索Mono。
public interface PersonRepository extends ReactiveMongoRepository<Person, String>{
}
但是我找不到将地址添加到此人地址的方法 并返回给定地址的单声道。 这是我想要实现的目标的签名:
Mono<Address> addAddress(Address address)
这是我以前没有Reactor时使用的代码:
public Mono<Addresses> addAddress(Address address){
Mono<Person> person = personRepository.findById(personId);
// person.getAddresses().add(address) ?
// personRepository.save(person) ?
// return "address" as Mono
}
问题:如何将地址添加到Mono<Person>
,然后返回该地址的单声道?
答案 0 :(得分:1)
这应该可以解决问题:
public Mono<Addresses> addAddress(Address address){
return personRepository.findById(personId)
.doOnNext(p -> p.getAddresses().add(address))
.flatMap(personRepository::save)
.then(Mono.just(address));
}
then()
等待存储库保存数据,完成后返回地址。
另一种方法是从存储库返回的人员中提取(map
)地址(如果在保存过程中修改了地址,则可能是更好的解决方案)
public Mono<Addresses> addAddress(Address address){
return personRepository.findById(personId)
.doOnNext(p -> p.getAddresses().add(address))
.flatMap(personRepository::save)
.map(savedPerson -> savedPerson.getAddressess().findThisParticularJustSavedOne());
}