情况如下:我有两个MongoDB文档:用户和复制。
在检查用户是否有复制条目(文档)的基础上,我想在MongoDB中添加另一个实体。
目前我正在使用SpringWebFlux和SpringReactiveMongo。请参阅下面的代码。
@Autowired
ParserRepository parserRepository;
@Autowired
ReproductionRepository reproductionRepository;
@Autowired
UserRepository userRepository;
public void addParser(Parser parser, String keycloakUserId) {
Mono<User> userMono = userRepository.findByKeycloakUserId(keycloakUserId);
Mono<Reproduction> reproductionMono = reproductionRepository.findById(parser.getReproductionId());
userMono.zipWith(reproductionMono)
.filter(objects -> objects.getT2().getUserId().equals(objects.getT1().get_id()))
.then(parserRepository.save(parser))
.switchIfEmpty(Mono.error(new ParserDoesNotBelongToUserException("Unable to add, since this parser does not belong to you")));
}
我的问题如下:如何使用Mono的结果来验证正确的Mono是否存在,并基于该保存解析器文档。基本上结合两个单声道流的结果,以便执行另一个文档的保存,并以非阻塞的方式执行此操作。
上述方法似乎不起作用。在这种情况下,用两个独立的单声道来完成这个场景的最佳方式是什么?欢迎任何最佳实践提示。
摘自Mono#filter
文档:
过滤器(谓词)
因此,如果过滤器的计算结果为true,它将通过该值,如果为false,则不会。
问题是您在之后调用然后
。单声道的文件
然后(单声道其他)让这个单声道完成,然后播放另一个单声道。
这里的关键词是complete
,这基本上意味着,不管前面的行以什么形式完成,只要它完成了,它就会被忽略。因此,不管它在前一行中用(false/true)完成了什么,我们都可以运行,然后运行
。
我猜你想要这样的东西:
userMono.zipWith(reproductionMono).flatMap(objects -> {
if(objects.getT2().getUserId().equals(objects.getT1().get_id()))) {
return parserRepository.save(parser)
} else {
return Mono.error(new ParserDoesNotBelongToUserException("Unable to add, since this parser does not belong to you"));
}
}
请查看以下使用RestTemplate的controller代码(添加注释): 现在,我正试图通过反应式编程实现同样的目标。我现在使用WebFlux中的WebClient和Mono。但是,我很困惑如何将结果结合起来?看一看下面的代码(在任何地方都使用Mono,其余代码保持不变) 问题1:我们如何整合一切,形成一个Mono对象,并将其作为响应发送出去? 问题2:“CourseInfo CourseI
我正在使用Kafka和Spark 2.1结构化流。我有两个json格式的数据主题,例如: 我需要比较Spark中基于标记的两个流:name,当值相等时,执行一些额外的定义/函数。 如何使用Spark结构化流来做到这一点? 谢谢
我想获得客户总购买的平均值并将其存储在@x中 然后我想存储供应商总采购的平均值,并将其存储在@Y中
我在一个线程组中有几个采样器,每个采样器检索一条信息。然后我需要验证来自两个不同采样器的结果的一致性。特别是,我需要断言一个采样器响应中的字段是否等于JDBC响应中的字段。做这样的事情最好的方法是什么? 我曾考虑过向每个采样器添加一个beanshell后处理器,以便从每个样本中提取字段值并将其保存在两个变量中,然后添加一个访问这些变量的beanshell断言,但我想知道是否有更直接的方法。 在JM
我需要基于另一个流过滤一个流,并获取所有匹配条目的计数。 我已经尝试了以下和各种其他组合,但它没有按预期工作。 这个想法是: < li >对于从0到256的每个数字(流1) < li >查看该号码是否出现在另一个列表中(流2 ),如果出现的话 < li >计算出现次数除以流2中的元素总数(18)。 < li >如果没有出现,请收集0。 这基本上是根据流 2 中的出现次数查找流 1 中数字的频率。
我有以下课程: