@SuppressWarnings("unchecked")
    public List distinct(final String fieldName, final DBCollectionDistinctOptions options) {
        notNull("fieldName", fieldName);
        return new MongoIterableImpl<BsonValue>(null, executor,
                                                  options.getReadConcern() != null ? options.getReadConcern() : getReadConcern(),
                                                  options.getReadPreference() != null ? options.getReadPreference() : getReadPreference(),
                                                  retryReads) {
            @Override
            public ReadOperation<BatchCursor<BsonValue>> asReadOperation() {
                return new DistinctOperation<BsonValue>(getNamespace(), fieldName, new BsonValueCodec())
                               .filter(wrapAllowNull(options.getFilter()))
                               .collation(options.getCollation())
                               .retryReads(retryReads);
            }
        }.map(new Function<BsonValue, Object>() {
            @Override
            public Object apply(final BsonValue bsonValue) {
                if (bsonValue == null) {
                    return null;
                }
                BsonDocument document = new BsonDocument("value", bsonValue);
                DBObject obj = getDefaultDBObjectCodec().decode(new BsonDocumentReader(document), DecoderContext.builder().build());
                return obj.get("value");
            }
        }).into(new ArrayList<Object>());
    }
@SuppressWarnings("unchecked")
    public List distinct(final String fieldName, final DBCollectionDistinctOptions options) {
        notNull("fieldName", fieldName);
        return new MongoIterableImpl<BsonValue>(null, executor,
                                                  options.getReadConcern() != null ? options.getReadConcern() : getReadConcern(),
                                                  options.getReadPreference() != null ? options.getReadPreference() : getReadPreference(),
                                                  retryReads) {
            @Override
            public ReadOperation<BatchCursor<BsonValue>> asReadOperation() {
                return new DistinctOperation<BsonValue>(getNamespace(), fieldName, new BsonValueCodec())
                               .filter(wrapAllowNull(options.getFilter()))
                               .collation(options.getCollation())
                               .retryReads(retryReads);
            }
        }.map(new Function<BsonValue, Object>() {
            @Override
            public Object apply(final BsonValue bsonValue) {
                if (bsonValue == null) {
                    return null;
                }
                BsonDocument document = new BsonDocument("value", bsonValue);
                DBObject obj = getDefaultDBObjectCodec().decode(new BsonDocumentReader(document), DecoderContext.builder().build());
                return obj.get("value");
            }
        }).into(new ArrayList<Object>());
    }
@ SuppressWarnings ( "unchecked" ) public List distinct ( final String fieldName , final DBCollectionDistinctOptions options ) { notNull ( "fieldName" , fieldName ) ; return new MongoIterableImpl < BsonValue > ( null , executor , options . getReadConcern ( ) != null ? options . getReadConcern ( ) : getReadConcern ( ) , options . getReadPreference ( ) != null ? options . getReadPreference ( ) : getReadPreference ( ) , retryReads ) { @ Override public ReadOperation < BatchCursor < BsonValue > > asReadOperation ( ) { return new DistinctOperation < BsonValue > ( getNamespace ( ) , fieldName , new BsonValueCodec ( ) ) . filter ( wrapAllowNull ( options . getFilter ( ) ) ) . collation ( options . getCollation ( ) ) . retryReads ( retryReads ) ; } } . map ( new Function < BsonValue , Object > ( ) { @ Override public Object apply ( final BsonValue bsonValue ) { if ( bsonValue == null ) { return null ; } BsonDocument document = new BsonDocument ( "value" , bsonValue ) ; DBObject obj = getDefaultDBObjectCodec ( ) . decode ( new BsonDocumentReader ( document ) , DecoderContext . builder ( ) . build ( ) ) ; return obj . get ( "value" ) ; } } ) . into ( new ArrayList < Object > ( ) ) ; }
Find the distinct values for a specified field across a collection and returns the results in an array.

@param fieldName  Specifies the field for which to return the distinct values
@param options    the options to apply for this operation
@return A {@code List} of the distinct values
@mongodb.driver.manual reference/command/distinct Distinct Command
@since 3.4
Find the distinct values for a specified field across a collection and returns the results in an array .