以下是上下文:
一个人可以通过“houseRefs”属性引用几个房屋。
如果我想找到所有参考某个住宅的人,我会使用该请求
public List<Person> findPersons(House house){
Query query = new Query();
query.addCriteria(
Criteria.where("houseRefs").in(house.getId())
);
return mongoTemplate.find(query, Person.class);
}
我现在有一份众议院名单: 概括将是:
public Map<House,List<Person>> findAllPeople(List<House> houses){
Map<House,List<Person>> map = new Map<House,List<Person>>();
for (House house:houses){
map.put(house,findPersons(house));
}
}
到目前为止,非常好。
这是我的要求:是否可以进行查询以仅进入一步
Map<House,List<Person>>
并避免使用for循环?
通过使用mongodb的内部机制而不是使用java循环来获取最佳结果
类似的东西:
public Map<House,List<Person>> findAllPeople(List<House> houses){
Query query = new Query();
query.addCriteria(
????
);
??? use aggregation ???
}
答案 0 :(得分:1)
public List<Person> findAllPeople(List<House> houses) {
List<String> idList = new ArrayList<String>();
for (House house: houses) {
idList.add(house.getId());
}
Query query = new Query();
query.addCriteria(
Criteria.where("houseRefs").in(idList)
);
return mongoTemplate.find(query, Person.class);
}