Search in sources :

Example 1 with MongoIterableImpl

use of com.mongodb.client.internal.MongoIterableImpl in project mongo-java-driver by mongodb.

the class DBCollection method distinct.

/**
 * 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
 */
@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>());
}
Also used : BsonValueCodec(org.bson.codecs.BsonValueCodec) BatchCursor(com.mongodb.internal.operation.BatchCursor) MapReduceBatchCursor(com.mongodb.internal.operation.MapReduceBatchCursor) BsonDocument(org.bson.BsonDocument) BsonDocumentReader(org.bson.BsonDocumentReader) MongoIterableImpl(com.mongodb.client.internal.MongoIterableImpl) BsonValue(org.bson.BsonValue)

Aggregations

MongoIterableImpl (com.mongodb.client.internal.MongoIterableImpl)1 BatchCursor (com.mongodb.internal.operation.BatchCursor)1 MapReduceBatchCursor (com.mongodb.internal.operation.MapReduceBatchCursor)1 BsonDocument (org.bson.BsonDocument)1 BsonDocumentReader (org.bson.BsonDocumentReader)1 BsonValue (org.bson.BsonValue)1 BsonValueCodec (org.bson.codecs.BsonValueCodec)1