通过使用Spring Data Mongodb存储库匹配列表中的元素来查询对象

时间:2015-03-23 19:17:47

标签: mongodb spring-data spring-data-mongodb

我目前的设置如下:我有SpringData Mongo存储库和以下类结构:

User.class:

public class User {
  private String firstName;
  private String lastName;

  @Id
  private String id;

  @DBRef
  private List<Division> divisions;

  [...]
}

和Div​​ision.class

public class Division {
  @Id
  private String id;

  [...]
}

我现在想要收集属于某个部门的所有用户。如何使用SpringData Mongo存储库完成此操作?

为了澄清,程序性(但非常低效)的方法将是

List<User> matchingUser = new ArrayList<>();
List<User> users = userRepository.findAll()
for(User user: users) {
  if(user.divisions.contains(matchingDivision)) {
    matchingUser.add(user);
  }
}

我已经尝试了以下内容,但没有运气:

@Repository
public interface UserRepository extends MongoRepository<User, String> {
  @Query(value = "{'divisions': {$elemMatch: ?0 } }")
  public List<User> findAllByDivisionInDivisions(Division division);
}

我的完整项目可以找到here,但如果您需要任何具体信息,请告诉我,我会提供。

1 个答案:

答案 0 :(得分:0)

根据id而不是整个部门进行搜索,因为它是DBRef。否则,您必须解析每个DBRef,这是从数据库中额外提取的。

Sublime Text 2 (2.0.2)