Write custom query in mongodb repository

2019-07-23 07:14发布

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" : "dinesh.dhiman@oodlestechnologies.com",
        "firstName" : "Dinesh Dhiman",
        "email" : "dinesh.dhiman@oodlestechnologies.com",
        "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.

2条回答
你好瞎i
2楼-- · 2019-07-23 07:43

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));
查看更多
Bombasti
3楼-- · 2019-07-23 07:59

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

@Query("{user._id:?0}")
AuthenticationToken findByUser(String userId);
查看更多
登录 后发表回答