首页 文章

Spring MongoDB QueryDSL查询由@DBRef相关列表

提问于
浏览
0
@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);

1 回答

  • 0

    我认为这完全取决于MongoDB集合中的JSON数据 .

    在您的情况下,“models”集合应该具有“users”数组的属性 . 只要密钥名称匹配(即“用户”),它就应该有效 .

    Detailed Example:-

    以下示例正常工作 .

    People Collection:-

    {
        "_id" : ObjectId("57c8269b3ee7df409d4d2b64"),
        "name" : "Erin",
        "places" : [ 
            {
                "$ref" : "places",
                "$id" : ObjectId("57c813b33ee7df409d4d2b58")                
            }
        ],
        "url" : "bc.example.net/Erin"
    }
    

    Places Collection:-

    {
        "_id" : ObjectId("57c813b33ee7df409d4d2b58"),
        "name" : "Broadway Center",
        "url" : "bc.example.net"
    }
    

    Classes:-

    Places class:-

    @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
    }
    

    People class:-

    @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 class:-

    @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;
    
        }
    

相关问题