【问题标题】:Finding distinct from collections in mongodb在 mongodb 中查找与集合不同
【发布时间】:2023-03-07 01:53:01
【问题描述】:

我们之前从集合中查找不同元素的实现曾经是:

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

尝试使用 mongo 3.3.0+ 将其升级到当前实现:

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

也试过了

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

在这种情况下,iterable 的目标类型应该是什么?

编辑 - 该问题与Get distinct records values 不重复,因为在mongodb-java-driver 的升级中实施已更改。

【问题讨论】:

    标签: java mongodb mongodb-java mongodb-java-3.3.0


    【解决方案1】:

    你可以试试这样的。

    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());
     }
    

    【讨论】:

    • 谢谢。这也可以进一步改进为for(String str : iterable) { list.add(str); },而不是使用上面的光标。我使用它的方式是List&lt;String&gt; list = Lists.newArrayList(mongoClient.getDatabase(dbName).getCollection(collectionName, TDocType.class).distinct(NAME_KEY, String.class));,其中Lists 来自谷歌收藏。
    • 或更简单的: List list = mongoClient.getDatabase(dbName).getCollection(collectionName, TDocType.class).distinct(NAME_KEY, String.class).into(new ArrayList( ));
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2016-06-07
    • 2019-01-06
    • 2014-03-22
    • 1970-01-01
    • 2020-05-16
    • 2016-04-26
    • 2018-01-30
    相关资源
    最近更新 更多