Nur bestimmte Felder projizieren, wenn MongoTemplate aus Spring Data MongoDB für eine Suchabfrage verwendet wird?

Aug 15 2020

Ich frage mich, wie ich, wenn möglich, eine Suchabfrage mit Spring Data MongoDB ausführen kann, indem ich mongoTemplatedas gesamte Dokument verwende, aber nicht zurückgebe. Mit dem "nativen" Java Sync-Treiber von MongoDB kann ich Folgendes tun:

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

so dass das documenteinzige das "Feld" und sonst nichts enthält.

Wie kann ich dasselbe tun, mongoTemplateda ich scheinbar nichts Ähnliches finde wie projectionbei der Verwendung mongoTemplate.findOne(..)? Müssen Sie dazu eine Aggregat-Pipeline verwenden mongoTemplate?

Ich verwende Spring Data MongoDB Version 3.0.1.RELEASE (Spring Boot 2.3.3).

Antworten

2 DeepakPatankar Aug 15 2020 at 12:29

Sie können include()oder exclude()Optionen in der Abfrage verwenden.

Ex:

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

Dokumentationsreferenz: data / mongodb / core / query / Field