¿Proyectar solo ciertos campos al usar MongoTemplate de Spring Data MongoDB para una consulta de búsqueda?

Aug 15 2020

Me pregunto cómo, si es posible, puedo ejecutar una consulta de búsqueda con Spring Data MongoDB usando mongoTemplatepero no devolver el documento completo. Con el controlador Java Sync "nativo" de MongoDB puedo hacer esto:

Document document = myCollection.find(eq("something", 12)).sort(descending("field")).limit(1).projection(include("field")).first();

de modo que documentsolo incluya el "campo" y nada más.

¿Cómo puedo hacer lo mismo con mongoTemplateya que parece que no puedo encontrar algo similar a projectioncuando uso mongoTemplate.findOne(..). ¿Necesita utilizar una canalización agregada para hacer esto mongoTemplate?

Estoy usando Spring Data MongoDB versión 3.0.1.RELEASE (spring boot 2.3.3).

Respuestas

2 DeepakPatankar Aug 15 2020 at 12:29

Puede utilizar las opciones include()u exclude()en la consulta.

ex:

Query query = new Query();
query.fields().include("name").exclude("id");
List<User> john = mongoTemplate.find(query, User.class);

Referencia de la documentación: data / mongodb / core / query / Field