2015-08-20 12 views
8

Come possiamo selezionare campi specifici in Spring Data Mongo. Ho provato quanto segue, ma ho ottenuto un'eccezione da Foo a String.Come restituire solo campi specifici per una query in Spring Data MongoDB?

Utilizzando @Query

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

non @Query

String findPathByPath(String path); 

Ecco il modello di documento

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

    String name, path; 
    … 
} 
+0

cosa stai parlando? MongoDB non ha colonne. – chrylis

+0

Voglio restituire solo il campo specifico dal mio modello. In sql equivale a SELECT path FROM foo – richersoon

risposta

4

È possibile utilizzare

interrogazione query = NE w Query();

query.fields(). Include ("percorso");

11

MongoDB restituisce solo i documenti JSON per le query standard. Ciò che ti piacerebbe vedere può essere raggiunto restituendo ancora un List<Foo>. La proprietà fields in @Query causerà solo la restituzione dei campi impostati su 1.

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

Noi di solito consiglia l'introduzione di un DTO dedicted per questo in modo da evitare il parzialmente riempito Foo esempio di essere consegnato a save(…) a sua volta.

Un'altra opzione è l'utilizzo del framework di aggreation ma è più coinvolto.

+1

Oliver, la creazione di un DTO per ogni query selezionata non è fattibile poiché eseguiamo molte query per selezionare il sottoinsieme di dati. Spring Data JPA restituisce l'elenco nei casi in cui non desideriamo mappare a DTO. Similalr a questo, C'è qualche API per restituire un MAp di valori invece di mappare su un DTO? – VimalKumar

6

È possibile utilizzare

public interface PersonRepository extends MongoRepository<Person, String> 

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

} 

maggiori informazioni in dati di primavera documentation