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
}

I tried this solution but it doesnt return anything:

QModel model = new QModel(); Pageable pageable = new PageRequest(0, 100);

return modelsRepository.findAll(model.users.any().id.eq(anUserId), pageable);

Dreampie
  • 1,321
  • 4
  • 17
  • 32

1 Answers1

0

I think it all depends on the JSON data in MongoDB collection.

In your case, the "models" collection should have an attribute of "users" Array. As long as the key name is matching (i.e. "users"), it should work.

Detailed Example:-

The following example works fine.

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;

    }
notionquest
  • 37,595
  • 6
  • 111
  • 105