@Document(collection="users")
public class User{
@Id
private int id;
private String name;
...
//getters-setters
}
@Document(collection="models")
public class Model{
@Id
private int id;
private String name;
@DBRef
private List<User> users;
...
//getters-setters
}
我试过这个解决方案,但它不会返回任何内容:
QModel model = new QModel(); Pageable pageable = new PageRequest(0,100);
返回modelsRepository.findAll(model.users.any()。id.eq(anUserId),pageable);
答案 0 :(得分:0)
我认为这完全取决于MongoDB集合中的JSON数据。
在您的情况下,&#34;模型&#34;集合应具有&#34;用户&#34;的属性。阵列。只要密钥名称匹配(即&#34;用户&#34;),它就应该有效。
详细示例: -
以下示例正常。
人物收藏: -
{
"_id" : ObjectId("57c8269b3ee7df409d4d2b64"),
"name" : "Erin",
"places" : [
{
"$ref" : "places",
"$id" : ObjectId("57c813b33ee7df409d4d2b58")
}
],
"url" : "bc.example.net/Erin"
}
地方收藏: -
{
"_id" : ObjectId("57c813b33ee7df409d4d2b58"),
"name" : "Broadway Center",
"url" : "bc.example.net"
}
<强>类: - 强>
地方课程: -
@Document(collection = "places")
public class Places implements Serializable {
private static final long serialVersionUID = -5500334641079164017L;
@Id
private String id;
private String name;
private String url;
...get and setters
}
人员类: -
@Document(collection = "people")
public class People implements Serializable {
private static final long serialVersionUID = 6308725499894643034L;
@Id
private String id;
private String name;
@DBRef
private List<Places> places;
private String url;
...get and setters
}
存储库类: -
@Repository
public interface PeopleRepository extends PagingAndSortingRepository<People, String> {
public People findById(String id);
@Query(value = "{ 'status' : ?0 }")
public Page<People> findByStatus(String status, Pageable pageable);
}
<强>的FindAll: - 强>
public Boolean findAllPeople() {
Page<People> peoplePage = peopleRepository.findAll(new PageRequest(0, 20));
System.out.println("Total elements :" + peoplePage.getTotalElements());
for (People people : peoplePage) {
System.out.println("People id :" + people.getId());
System.out.println("Place size :" + people.getPlaces().size());
people.getPlaces().forEach(p -> System.out.println(p.getName()));
}
return true;
}