Qul*_*ulu 5 java spring repository mongodb spring-data
使用MongoDB的最新Spring数据,我想检索集合中的所有记录,其字段(在我的情况下,两个)与给定的String对数组中的值匹配.
鉴于以下文档结构:
@Document(collection="persons")
@CompoundIndexes({
@CompoundIndex(name="field_job_idx", def="{ 'field':1, 'job':1 }", unique=true)
})
class Person {
String field;
String job;
}
Run Code Online (Sandbox Code Playgroud)
给定以下存储库接口:
interface PersonRepository implements Repository<Person,Long> {
@Query("{ 'field' : { $in : ?0 } }")
List<Person> findAnyOfTheseFields(String[] fields); //this is easy for searching in single-valued array of fields
@Query("{ 'job' : { $in : ?0 } }")
List<Person> findAnyOfTheseJobs(String[] jobs); //this is easy for searching in single-valued array of jobs
@Query(" WHAT GOES HERE? ")
List<Person> findAnyOfTheseUniqueFieldAndJobPairs(/* ARRAY OF PAIRS OF STRINGS */);
}
Run Code Online (Sandbox Code Playgroud)
我如何构建findAnyOfTheseUniqueFieldAndJobPairs存储库方法及其注释,以便我可以在persons集合中搜索哪些Person记录的值field和job值都存在于给定的对/元组数组中?
我可以逃避来包装选项field,并job在这些包装类的实例给定阵列中的包装类和查询?
我想这样做(原谅可怕的语法,但这就是我的想法):
repository.findAnyOfTheseUniqueFieldAndJobPairs([ ["culinary","chef"], ["law","judge"], ["athletics","goalie"]])
Run Code Online (Sandbox Code Playgroud)
并在存储库中:
@Query("{ 'field','job' : { $in : ?0 } }")
List<Person> findAnyOfTheseUniqueFieldAndJobPairs(Tuple<String,String>[] fieldJobPairs);
Run Code Online (Sandbox Code Playgroud)
您可以使用 Spring Data Mongo CriteriaAPI。基于这个答案:
Criteria[] criteriaArray = new Criteria[]{
Criteria.where("field").is("culinary").and("job").is("chef"),
Criteria.where("field").is("law").and("job").is("judge"),
Criteria.where("field").is("athletics").and("job").is("goalie")
};
Criteria criteria = new Criteria().orOperator(criteriaArray);
Query query = new Query().addCriteria(criteria);
List<Person> personList = mongoTemplate.find(query, Person.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1118 次 |
| 最近记录: |