2016-10-25 3 views
1

Unsere bisherigen Implementierung für unterschiedliche Elemente aus einer Sammlung zu finden, verwendet werden:Finding unterscheidet sich von Sammlungen in mongodb

List<String> names = mongoClient.getDB(dbName).getCollection(collectionName).distinct(NAME_KEY); 

Der Versuch, dies in der aktuellen Implementierung mit Mongo Upgrade 3.3.0+ wie versucht ist:

List<String> names = mongoClient.getDatabase(dbName) 
         .getCollection(collectionName, TDocType.class) 
         .distinct(NAME_KEY, String.class); // compile error - required Class<TResult> 

Haben auch einen Versuch

.distinct(NAME_KEY, TDocType.class) // doesn't work      

gegeben: Was soll das sein Zieltyp des Iterablen in diesem Fall?

bearbeiten - Die Frage ist nicht ein Duplikat Get distinct records values seit der Umsetzung über das Upgrade von mongodb-java-driver geändert hat.

Antwort

2

Sie können so etwas versuchen.

DistinctIterable<String> iterable = mongoClient.getDatabase(dbName). 
      .getCollection(collectionName, TDocType.class).distinct(NAME_KEY, String.class); 
MongoCursor<String> cursor = iterable.iterator(); 
List<String> list = new ArrayList<>(); 
while (cursor.hasNext()) { 
    list.add(cursor.next()); 
} 
+0

Danke. Auch das kann weiter verbessert werden als 'for (String str: iterable) {list.add (str); } 'anstatt Cursor oben zu verwenden. Die Art, wie ich es benutze, ist "Liste list = Lists.newArrayList (mongoClient.getDatabase (dbName) .getCollection (SammlungName, TDocType.class) .distinct (NAME_KEY, String.class));' wo die 'Listen' von ist Google-Sammlung. – nullpointer

+1

Oder einfacher: Liste list = MongoClient.getDatabase (dbName) .getCollection (SammlungName, TDocType.class) .distinct (NAME_KEY, String.class) .into (neue ArrayList <>()); – jyemin

Verwandte Themen