Search in sources :

Example 1 with AggregationResults

use of org.springframework.data.mongodb.core.aggregation.AggregationResults in project spring-data-mongodb by spring-projects.

the class MongoTemplate method doAggregate.

@SuppressWarnings("ConstantConditions")
protected <O> AggregationResults<O> doAggregate(Aggregation aggregation, String collectionName, Class<O> outputType, AggregationOperationContext context) {
    DocumentCallback<O> callback = new UnwrapAndReadDocumentCallback<>(mongoConverter, outputType, collectionName);
    AggregationOptions options = aggregation.getOptions();
    if (options.isExplain()) {
        Document command = aggregation.toDocument(collectionName, context);
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("Executing aggregation: {}", serializeToJsonSafely(command));
        }
        Document commandResult = executeCommand(command);
        return new AggregationResults<>(commandResult.get("results", new ArrayList<Document>(0)).stream().map(callback::doWith).collect(Collectors.toList()), commandResult);
    }
    List<Document> pipeline = aggregation.toPipeline(context);
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug("Executing aggregation: {} in collection {}", serializeToJsonSafely(pipeline), collectionName);
    }
    return execute(collectionName, collection -> {
        List<Document> rawResult = new ArrayList<>();
        AggregateIterable<Document> aggregateIterable = // 
        collection.aggregate(pipeline, Document.class).collation(// 
        options.getCollation().map(Collation::toMongoCollation).orElse(null)).allowDiskUse(options.isAllowDiskUse());
        if (options.getCursorBatchSize() != null) {
            aggregateIterable = aggregateIterable.batchSize(options.getCursorBatchSize());
        }
        MongoIterable<O> iterable = aggregateIterable.map(val -> {
            rawResult.add(val);
            return callback.doWith(val);
        });
        return new AggregationResults<>(iterable.into(new ArrayList<>()), new Document("results", rawResult).append("ok", 1.0D));
    });
}
Also used : AggregationOptions(org.springframework.data.mongodb.core.aggregation.AggregationOptions) AggregationResults(org.springframework.data.mongodb.core.aggregation.AggregationResults) Document(org.bson.Document)

Aggregations

Document (org.bson.Document)1 AggregationOptions (org.springframework.data.mongodb.core.aggregation.AggregationOptions)1 AggregationResults (org.springframework.data.mongodb.core.aggregation.AggregationResults)1