Progettare solo determinati campi quando si utilizza MongoTemplate da Spring Data MongoDB per una query di ricerca?

Aug 15 2020

Mi chiedo come, se possibile, posso eseguire una query di ricerca con Spring Data MongoDB utilizzando mongoTemplatema non restituire l'intero documento? Con il driver Java Sync "nativo" di MongoDB posso fare così:

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

in modo che il documentsolo include il "campo" e nient'altro.

Come posso fare lo stesso con mongoTemplatedal momento che non riesco a trovare qualcosa di simile a projectionquando lo uso mongoTemplate.findOne(..). È necessario utilizzare una pipeline aggregata per eseguire questa operazione mongoTemplate?

Sto usando Spring Data MongoDB versione 3.0.1.RELEASE (avvio primaverile 2.3.3).

Risposte

2 DeepakPatankar Aug 15 2020 at 12:29

È possibile utilizzare include()o le exclude()opzioni nella query.

ex:

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

Documentazione di riferimento: data / mongodb / core / query / Field