使用Spring Data Reactive MonogoDB的$ or运算符,具有多个表达式和一个表达式中的多个字段

问题描述

在MongoDB中,我可以使用$or[{key1:'value11',key2:'value12'},{key1:'value21',key2:'value22'},{key1:'value31',key2:'value32'},...]来查询几个与$or运算符中至少一个表达式匹配的文档。那么如何使用Spring Data Reactive MonogoDB来完成呢?

尤其是,我将实体类定义为:

@Document
public class MyDocument
{
    @Id
    private String id;
    private String field1;
    private String field2; 
}

然后是实体的存储库接口:

  public interface MyDocumentRepository extends ReactiveMongoRepository<MyDocument,String>

现在的问题是如何在MyDocumentRepository中定义一个方法来使用field1field2查询文档:

  1. 似乎没有合适的关键字来创建查询方法(findAllBy(field1AndField2)In ???)
  2. 如果使用基于JSON的查询方法,我确实知道如何完成Cloze测试...
    @Query("{$or:[(:fields)]}
    Flux<MyDocument> findAllBy????(Flux<???> fields)
    
    

解决方法

Spring Data MongoDB支持ReactiveMongoTemplate。在存储库中,您可以将其用作与MongoDB的连接,该连接可以与@Autowire一起使用。

ReactiveMongoTemplate中,您可以使用Criteriaand这样的操作来创建or

Query query = new Query();
query.addCriteria(
    new Criteria().andOperator(
        Criteria.where("field1").exists(true),Criteria.where("field1").ne(false)
    )
);

,并且可以使用之前创建的ReactiveMongoTemplate

实例将其传递给MongoDB。
Flux<Foo> result = reactiveMongoTemplate.find(query,Foo.class);

可以根据需要找到ReactiveMongoTemplate的配置文件here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...