使用Mongo Java驱动程序3.0从Mongo集合获取字段的不同值时发生异常

使用Mongo Java驱动程序3.0从Mongo集合获取字段的不同值时发生异常,java,mongodb,mongodb-query,mongodb-java,Java,Mongodb,Mongodb Query,Mongodb Java,我从mongodb得到了不同的字段值。 在命令行中运行以下查询时,效果良好。 db.celldata.distincttenId 我正在使用MongoJava3.0驱动程序,通过以下查询检索不同的值 MongoCursor迭代器=coll.distincttenantId,String.class.iterator 当我运行查询时,我得到以下异常 org.bson.BsonInvalidOperationException:readString只能在CurrentBSONType为STRING时

我从mongodb得到了不同的字段值。 在命令行中运行以下查询时,效果良好。 db.celldata.distincttenId

我正在使用MongoJava3.0驱动程序,通过以下查询检索不同的值 MongoCursor迭代器=coll.distincttenantId,String.class.iterator

当我运行查询时,我得到以下异常
org.bson.BsonInvalidOperationException:readString只能在CurrentBSONType为STRING时调用,而不能在CurrentBSONType为NULL时调用。

这里出现错误的根本原因是因为您有一个字符串类型作为预期的输出,并且其中一个不同的值实际上为NULL。在我看来,你有两种处理方法

还需要注意的是,一般来说,迭代器对于一个独特的列表来说是多余的,所以直接转到ArrayList

或者。过滤掉不需要的空值:

    ArrayList<String> distinct = coll.distinct("tenantId", String.class)
            .filter(new Document("tenantId",new Document("$ne",null)))
            .into(new ArrayList<String>());

    System.out.println(distinct);
    ArrayList<BsonValue> distinct = coll.distinct("tenantId", BsonValue.class)
            .into(new ArrayList<BsonValue>());

    System.out.println(distinct);
    ArrayList<Object> objects = new ArrayList<Object>();

    MongoCursor<Document> iterator = coll.aggregate(Arrays.asList(
            new Document("$group",
                    new Document("_id", "$tenantId")
            )
    )).iterator();

    while (iterator.hasNext()) {
        objects.add(iterator.next().get("_id"));
    }

    System.out.println(objects);