Qual é a diferença entre o MongoTemplate da Spring Data e o MongoRepository?

Eu preciso escrever um aplicativo com o qual eu possa fazer consultas complexas usando spring-data e mongodb. Eu comecei usando o MongoRepository, mas lutei com consultas complexas para encontrar exemplos ou para realmente entender a sintaxe.

Estou falando de consultas como esta:

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
    List<User> findByEmailOrLastName(String email, String lastName);
}

ou o uso de consultas baseadas em JSON que tentei por tentativa e erro, porque não obtive a sintaxe correta. Mesmo depois de ler a documentação do mongodb (exemplo não funcional devido à sintaxe incorreta).

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
    @Query("'$or':[{'firstName':{'$regex':?0,'$options':'i'}},{'lastName':{'$regex':?0,'$options':'i'}}]")
    List<User> findByEmailOrFirstnameOrLastnameLike(String searchText);
} 

Depois de ler toda a documentação, parece quemongoTemplate é muito melhor documentado entãoMongoRepository. Estou me referindo à seguinte documentação:

http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/

Você pode me dizer o que é mais conveniente e poderoso de usar?mongoTemplate ouMongoRepository? Ambos estão maduros ou um deles não tem mais recursos do que o outro?

questionAnswers(3)

yourAnswerToTheQuestion