问题描述
在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
中定义一个方法来使用field1
和field2
查询文档:
- 似乎没有合适的关键字来创建查询方法(
findAllBy(field1AndField2)In
???) - 如果使用基于JSON的查询方法,我确实知道如何完成Cloze测试...
@Query("{$or:[(:fields)]} Flux<MyDocument> findAllBy????(Flux<???> fields)
解决方法
Spring Data MongoDB支持ReactiveMongoTemplate
。在存储库中,您可以将其用作与MongoDB的连接,该连接可以与@Autowire
一起使用。
在ReactiveMongoTemplate
中,您可以使用Criteria
和and
这样的操作来创建or
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