2016-05-06 11 views
2

Ich arbeite derzeit an einem Projekt mit Spring Data Mongo. Mein Repository ist nur eine Schnittstelle, die das MongoRepository erweitert. Ich möchte eine benutzerdefinierte Abfragemethode hinzufügen, um alle eindeutigen Werte für eines der Felder meiner Sammlung abzurufen.Spring Data Mongo - Abfrage-Methoden und Distinct Feld

ich so etwas wie dies versuchte:

@RepositoryRestResource(path = "devices", collectionResourceRel = "deviceInfos") 
public interface DeviceInfoRepository extends MongoRepository<DeviceInfo, String> { 

    @RestResource(path = "distinctUnitIds") 
    List<String> findDistinctUnitIdBy(); 

} 

Mit diesem Code, Frühling mir einen Fehler, weil es nicht in der Lage ist meine Liste zu erstellen. Also habe ich das versucht:

@RepositoryRestResource(path = "devices", collectionResourceRel = "deviceInfos") 
public interface DeviceInfoRepository extends MongoRepository<DeviceInfo, String> { 

    @RestResource(path = "distinctUnitIds") 
    List<DeviceInfo> findDistinctUnitIdBy(); 

} 

Dieser Code funktioniert, aber die verschiedenen scheint völlig ignoriert werden.

Die Dokumentation über in Abfragemethode Distinct ist wirklich nicht klar ...

Habe ich etwas falsch gemacht? Was ist der beste Weg zu lösen, die verschiedenen Werte eines Feldes mit Spring Data zu erhalten?

Danke!

Antwort

4

Sie müssen Spring Data verwenden MongoTemplate - die MongoRepository Schnittstellen sind nur für grundlegende Funktionalität und für feinere Korn Kontrolle von dem, was Sie abfragen, ist es am besten zu verwenden MongoTemplate. Hier

ist ein Beispiel dafür, wie man verschiedene Werte aus einer Sammlung bekommen würde:

Criteria criteria = new Criteria(); 
criteria.where("dataset").is("d1"); 
Query query = new Query(); 
query.addCriteria(criteria); 
List list = mongoTemplate.getCollection("collectionName") 
    .distinct("source",query.getQueryObject()); 

Hier ist der Link zu mehr Informationen: mongodb mongoTemplate get distinct field with some criteria

+1

Vielen Dank für Ihre Antwort. Ich habe so etwas erwartet. Gibt es eine Vorstellung davon, was das findDistinctBy im Referenzhandbuch beschrieben hat? –

+0

Das Schlüsselwort distinct wird in Mongo-Repositories nicht unterstützt. Überprüfen Sie die unterstützten Schlüsselwörter hier http://docs.spring.io/spring-data/data-document/docs/current/reference/html/#mongodb.repositories.queries – Sigrist