I have the following MongoDB entities:
public class Player {
@Id
private String id;
private String username;
private int rating;
private boolean active;
}
public class Match {
@Id
private String id;
@DBRef
private Player playerOne;
@DBRef
private Player playerTwo;
}
I try to get all Player's matches. It means that e.g I have current player and matches list should be returned for matches when playerOne == current player or playerTwo == current player. I used MongoRepository for this:
public interface MatchRepository extends MongoRepository<Match, String> {
@Query(value = "{'$or': [{'playerOne.id': ?0}, {'playerTwo.id': ?0}]}")
List<Match> findByPlayerId(String playerId);
}
When I've executed findByPlayerId method I retrieved below error:
Caused by: com.mongodb.util.JSONParseException:
{'$or': [{'playerOne.id': "58ea191756a4302290fff9b1"}, {'playerTwo.id': "58ea191756a4302290fff9b1"0}]}
I noticed strange 0
character on the end of error message: "0}]}
I also made some workaround and pass the same player.id
as a second method argument and it works fine:
@Query(value = "{'$or': [{'playerOne.id': ?0}, {'playerTwo.id': ?1}]}")
List<Match> findByPlayerId(String playerId, String palyerId2);
Do you have any ideas why first approach returns JSONParseException?
Here is the ticket covering that change. Its been resolved and released. Try boot version 1.5.2 and after or spring mongo 1.10.1 and after.