概括为mongodb spring请求列表,避免循环

时间:2014-02-20 11:48:58

标签: java spring mongodb

以下是上下文:

一个人可以通过“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 ???
}

1 个答案:

答案 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);
}