it-swarm.com.de

Wie kann ich nur bestimmte Felder für eine Abfrage in Spring Data MongoDB zurückgeben?

Wie können wir in Spring Data Mongo bestimmte Felder auswählen? Ich habe folgendes versucht, aber ich bekam eine Ausnahme von Foo zu String.

@Query verwenden

@Query(value="{path : ?0}", fields="{path : 0}")
String findPathByPath(String path);

Nicht @Query

String findPathByPath(String path);

Hier ist das Dokumentenmodell

@Document(collection = "foo")
public class Foo  {

  String name, path;
  …
}
15
richersoon

MongoDB gibt nur JSON-Dokumente für Standardabfragen zurück. Was Sie gerne sehen möchten, erreichen Sie, indem Sie weiterhin einen List<Foo> zurückgeben. Die fields-Eigenschaft in @Query bewirkt, dass nur die auf 1 gesetzten Felder zurückgegeben werden.

@Query(value="{ path : ?0}", fields="{ path : 0 }")
List<Foo> findByPath(String path);

Wir empfehlen in der Regel, ein dediziertes DTO einzuführen, um zu verhindern, dass die teilweise ausgefüllte Foo-Instanz wiederum an save(…) übergeben wird.

Eine andere Option ist die Verwendung des Aggreation-Frameworks.

16
Oliver Drotbohm

Sie können verwenden 

public interface PersonRepository extends MongoRepository<Person, String>

  @Query(value="{ 'firstname' : ?0 }",fields="{ 'firstname' : 1, 'lastname' : 1}")
  List<Person> findByThePersonsFirstname(String firstname);

}

Weitere Informationen in den Frühlingsdaten Dokumentation

14
Nikhil Kumar K

Sie können verwenden 

Query query = new Query();

query.fields().include("path");
9
Pankaj Mandale

Sie können unten die Abfrage verwenden, um bestimmte Felder zu erhalten.

@Query(fields="{path : 1}")
Foo findPathByPath(String path);

Datensätze in der DB vorhanden

{
    "name" : "name2",
    "path" : "path2"
},
{
    "name" : "name3",
    "path" : "path3"
}

Die folgende Abfrage gibt ein Foo-Objekt zurück, wenn path = Path3 ist

{
    "name": null,
    "path": "path3"
}

wir müssen die erforderlichen Felder mit fieldName: 1 angeben. Wenn nicht, dann geben Sie es mit 0 an.

1
Ajit Nikam