¿Cuál es la diferencia entre MongoTemplate y MongoRepository de Spring Data?

Necesito escribir una aplicación con la que pueda hacer consultas complejas utilizando spring-data y mongodb. Comencé a usar MongoRepository, pero tuve problemas con las consultas complejas para encontrar ejemplos o para entender realmente la sintaxis.

Estoy hablando de consultas como esta:

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

o el uso de consultas basadas en JSON que probé por prueba y error porque no tengo la sintaxis correcta. Incluso después de leer la documentación de mongodb (ejemplo que no funciona debido a una sintaxis incorrecta).

@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);
} 

Después de leer toda la documentación parece quemongoTemplate está mucho mejor documentado entoncesMongoRepository. Me refiero a la siguiente documentación:

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

¿Puedes decirme qué es más conveniente y potente de usar?mongoTemplate oMongoRepository? ¿Ambos son maduros o uno de ellos carece de más características que el otro?

Respuestas a la pregunta(3)

Su respuesta a la pregunta