使用 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
中定义一个方法来查询field1
和field2
:
的文档
- 似乎没有合适的关键字来创建查询方法(
findAllBy(field1AndField2)In
???)
- 如果使用基于 JSON 的查询方法,我真的知道如何完成完形填空测试...
@Query("{$or:[(:fields)]}
Flux<MyDocument> findAllBy????(Flux<???> fields)
Spring 数据 MongoDB 支持 ReactiveMongoTemplate
。在存储库中,您可以将其用作与 MongoDB 的连接,后者可与 @Autowire
.
一起使用
在 ReactiveMongoTemplate
中,您可以使用 and
和 or
操作创建 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
在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
中定义一个方法来查询field1
和field2
:
- 似乎没有合适的关键字来创建查询方法(
findAllBy(field1AndField2)In
???) - 如果使用基于 JSON 的查询方法,我真的知道如何完成完形填空测试...
@Query("{$or:[(:fields)]} Flux<MyDocument> findAllBy????(Flux<???> fields)
Spring 数据 MongoDB 支持 ReactiveMongoTemplate
。在存储库中,您可以将其用作与 MongoDB 的连接,后者可与 @Autowire
.
在 ReactiveMongoTemplate
中,您可以使用 and
和 or
操作创建 Criteria
,例如
Query query = new Query();
query.addCriteria(
new Criteria().andOperator(
Criteria.where("field1").exists(true),
Criteria.where("field1").ne(false)
)
);
这可以通过 ReactiveMongoTemplate
Flux<Foo> result = reactiveMongoTemplate.find(query, Foo.class);
如果需要,可以找到 ReactiveMongoTemplate
配置的使用文档 here