Spring Data Mongo Custom Repository Query with ObjectID Spring Data Mongo Custom Repository Query with ObjectID mongodb mongodb

Spring Data Mongo Custom Repository Query with ObjectID


As the accepted solution did not yield any results in my case, I had to find another solution, that was:

Instead of using the autogenerated query functionality defined via @Query(...) I opted for manually building the DBObject used to query mongo, and defining the functionality as a default implementation in the interface, thus keeping it "clean" (" - because had to introduce a _query method)

Note: This solution only works in Java 1.8+

public interface SomeRepository extends MongoRepository<SomeEntity, String> {    @Query("{'nestedEntity._id': ?0}")    SomeEntity findByNestedEntityId_DoesntWork(String nestedEntityId);    @Query("?0")    SomeEntity _query(DBObject query);    default SomeEntity findByNestedEntityId(String nestedEntityId) {        DBObject queryObject = BasicDBObjectBuilder            .start("nestedEntity._id", new ObjectId(nestedEntityId))            .get();        return this._query(queryObject);    }}


Try this

@Query("{ 'items': { $elemMatch: { 'refund.id' :  ?0 } } }")RMA findRMAByItemRefund(String refundId);

From my experience, ?0 should standalone and not used as a mongo function parameter.

Also, is $id your own assumption or the field is actually stored as $id. If not, I will go with refund.id


I guess my problem was a little different, but since I couldn't find answer anywhere, I believe it's worth mentioning.Basically I wanted to do the search by ObjectId AND userId, so here's what I've done:

@Query("{ '_id': ?0, 'userId': ?1 }")T findByObjectIdAndUserId(final ObjectId objectId, final Long userId);