1

I am writing custom query in mongo repository like this :

public interface AuthenticationTokenRepository extends MongoRepository<AuthenticationToken, String> 
{

    AuthenticationToken save(AuthenticationToken token);

    AuthenticationToken findByToken(String token);

    @Query("{'user.username' : ?0}")
    AuthenticationToken findByUserId(String username);
}

But when i tried to findout AuthenticationToken by id then it is not working.

@Query("{'user._id' : ?0}")
        AuthenticationToken findByUserId(String userId);

My data in authentication table is as following:

> db.authenticationToken.find().pretty()
{
    "_id" : ObjectId("5565b4d444ae3b1a9228be87"),
    "_class" : "com.samepinch.domain.user.AuthenticationToken",
    "token" : "545c1d10-d769-41cf-a47c-2d698ec4df72",
    "user" : {
        "_id" : ObjectId("5565b4d444ae3b1a9228be86"),
        "age" : 0,
        "username" : "[email protected]",
        "firstName" : "Dinesh Dhiman",
        "email" : "[email protected]",
        "gender" : "male",
        "createdDate" : ISODate("2015-05-27T12:13:08.562Z"),
        "updatedDate" : ISODate("2015-05-27T12:13:08.562Z")
    },
    "createdDate" : ISODate("2015-05-27T12:13:08.605Z"),
    "updatedDate" : ISODate("2015-05-27T12:13:26.436Z")
}

I want to fetch data on the basis of userId. Can anyone help me.

1
  • 1
    there is no userId field in the document Commented May 27, 2015 at 12:37

2 Answers 2

0

I tried the same example. Try this sample code. It worked for me.

@Query("{user._id:?0}")
AuthenticationToken findByUser(String userId);
Sign up to request clarification or add additional context in comments.

Comments

0

In some versions of Spring you must use ObjectId class instead of String.
So you can try something like this

@Query("{'user._id' : ?0}")
    AuthenticationToken findByUserId(ObjectId objectId);

If you want to use this query in code, it will look something like this

String userId = "someUserId";
repository.findByUserId(new ObjectId(userId));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.