Projetar apenas alguns campos ao usar MongoTemplate do Spring Data MongoDB para uma consulta de localização?

Aug 15 2020

Gostaria de saber como, se possível, posso executar uma consulta find com Spring Data MongoDB usando, mongoTemplatemas não retornar o documento inteiro? Com o driver Java Sync "nativo" do MongoDB, posso fazer o seguinte:

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

de modo que documentapenas inclui o "campo" e nada mais.

Como posso fazer o mesmo com mongoTemplateuma vez que não consigo encontrar algo semelhante a projectionquando uso mongoTemplate.findOne(..). Você precisa usar um pipeline Aggregate para fazer isso mongoTemplate?

Estou usando o Spring Data MongoDB versão 3.0.1.RELEASE (spring boot 2.3.3).

Respostas

2 DeepakPatankar Aug 15 2020 at 12:29

Você pode usar include()ou exclude()opções na consulta.

ex:

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

Referência da documentação: data / mongodb / core / query / Field