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

$or operator with multiple expressions and multiple fields in an expression using Spring Data Reactive MonogoDB

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

特别是,我将实体 class 定义为:

@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 的查询方法,我真的知道如何完成完形填空测试...
    @Query("{$or:[(:fields)]}
    Flux<MyDocument> findAllBy????(Flux<???> fields)
    
    

Spring 数据 MongoDB 支持 ReactiveMongoTemplate。在存储库中,您可以将其用作与 MongoDB 的连接,后者可与 @Autowire.

一起使用

ReactiveMongoTemplate 中,您可以使用 andor 操作创建 Criteria,例如

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