query based on matching elements in DBRef list for mongodb using spring-data-mongodb

12,938

Solution 1

Querying for one element on an array is exactly like query for a field equality. You could read the MongoDB documentation here. So your query will be:

new Query(Criteria.where("users.$id").is(new ObjectId(userId)))

Solution 2

in repository interface type this query on the method:

@Query("{'company' :{'$ref' : 'company' , '$id' : ?0}}")
Company find(String companyId);
Share:
12,938

Related videos on Youtube

shailesh
Author by

shailesh

Updated on June 04, 2022

Comments

  • shailesh
    shailesh almost 2 years

    I am pretty new to mongodb. I am using spring-data-mongodb for my queries from java. Please guide me if this is achievable.

    Say I have two objects "Car" and "User" as following, where car has list of users,

    Class Car {
    
        @Id
        String id;
        String model;
        @DBRef
        List<User> users;
        @DBRef
        Company company;
    
    }
    
    Class User {
    
        @Id
        String id;
        String name;
    
    }
    

    I want to find all cars for a user, (find all cars where car.users has given user)

    Is it possible to achieve using spring-data-mongodb?

    It's pretty easy if there was only one DBRef element, eg, for company I can write a query like this,

    new Query(Criteria.where("company.$id").is(new ObjectId(companyId)))
    

    But, how to achieve this if there is a list of elements referenced as DBRef??

    Thanks for help.

  • Saakshi Aggarwal
    Saakshi Aggarwal almost 8 years
    If we need to search based on companyId and carId both together
  • Sachin
    Sachin over 6 years
    Hi @Miguel, What if i want to search using user's name instead of user id in single query
  • Hafiz
    Hafiz over 6 years
    been looking for the answer for days now @Sachin. did you find it by any chance? everyone seems to refer to Id,
  • Amir Choubani
    Amir Choubani about 6 years
    @Miguel how to use this with rest api. should I add a new customRepository and use mongoOperation ?