gpt4 book ai didi

java - Spring MongoDB 使用带有元组数组的 $in 查询不同的字段

转载 作者:行者123 更新时间:2023-12-04 12:04:08 26 4
gpt4 key购买 nike

将最新的 Spring 数据与 MongoDB 一起使用,我想检索集合中的所有记录,这些记录的字段(在我的例子中是两个)与给定的 String 对数组中的值匹配。

给定以下文档结构:

@Document(collection="persons")
@CompoundIndexes({
@CompoundIndex(name="field_job_idx", def="{ 'field':1, 'job':1 }", unique=true)
})
class Person {
String field;
String job;
}

给定以下存储库接口(interface):

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 */);
}

我如何构建 findAnyOfTheseUniqueFieldAndJobPairs存储库方法及其注释,以便我可以搜索 persons Collection Person记录其 fieldjob值都存在于给定的对/元组数组中的一对中吗?

我可以逃避包装 field 的选项吗?和 job在包装类中并查询这些包装类的给定实例数组?

我想做(请原谅可怕的语法,但这就是我的想法):

repository.findAnyOfTheseUniqueFieldAndJobPairs([ ["culinary","chef"], ["law","judge"], ["athletics","goalie"]])

并在存储库中:

@Query("{ 'field','job' : { $in : ?0 } }")
List<Person> findAnyOfTheseUniqueFieldAndJobPairs(Tuple<String,String>[] fieldJobPairs);

最佳答案

您可以使用 Spring Data Mongo Criteria应用程序接口(interface)。基于 this answer :

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);

关于java - Spring MongoDB 使用带有元组数组的 $in 查询不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21876146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com