Per prima cosa il .getCollection()
il metodo restituisce l'oggetto di raccolta Driver di base in questo modo:
DBCollection collection = mongoTemplate.getCollection("collectionName");
Quindi il tipo di oggetto query potrebbe essere diverso da quello che stai utilizzando, ma ci sono anche altre cose. Vale a dire quel .distinct()
restituisce solo i valori "distinti" della chiave che hai richiesto e non restituisce altri campi del documento. Quindi potresti fare:
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());
Ma questo restituirà solo "campione" come un singolo elemento nell'elenco, ad esempio.
Se vuoi i "campi" da un insieme distinto, usa .aggregate()
metodo invece. Con le "prime" occorrenze degli altri valori di campo per la chiave distinta:
DBCollection colllection = mongoTemplate.getCollection("collectionName");
List<DBObject> pipeline = Arrays.<DBObject>asList(
new BasicDBObject("$match",new BasicDBObject("dataset","d1")),
new BasicDBObject("$group",
new BasicDBObject("_id","$source")
.append("name",new BasicDBObject("$first","$name"))
.append("description", new BasicDBObject("$first","$description"))
)
);
AggregationOutput output = colllection.aggregate(pipeline);
Oppure i valori "distinti" effettivi di più campi, rendendoli tutti parte della chiave di raggruppamento:
DBCollection colllection = mongoTemplate.getCollection("collectionName");
List<DBObject> pipeline = Arrays.<DBObject>asList(
new BasicDBObject("$match",new BasicDBObject("dataset","d1")),
new BasicDBObject("$group",
new BasicDBObject("_id",
new BasicDBObject("source","$source")
.append("name","$name")
.append("description","$description")
)
)
);
AggregationOutput output = colllection.aggregate(pipeline);
Ci sono anche un diretto .aggregate()
già su istanze mongoTemplate, che ha una serie di metodi di supporto per creare pipeline. Ma questo dovrebbe almeno indirizzarti nella giusta direzione.