Example usage for org.springframework.data.mongodb.core.aggregation Aggregation sort

List of usage examples for org.springframework.data.mongodb.core.aggregation Aggregation sort

Introduction

In this page you can find the example usage for org.springframework.data.mongodb.core.aggregation Aggregation sort.

Prototype

public static SortOperation sort(Direction direction, String... fields) 

Source Link

Document

Factory method to create a new SortOperation for the given sort Direction  and fields .

Usage

From source file:org.ingini.mongodb.spring.example.aggregation.TestAggregationFramework.java

/**
 * Example taken from https://github.com/mongodb/mongo-ruby-driver/wiki/Aggregation-Framework-Examples
 * Command line import: mongoimport --drop --db aggregation_test_db --collection name_days name_days.json
 * <p>/*from   w ww .java2 s.com*/
 *      db.name_days.aggregate({$project : {names : 1, _id : 0}},
 *                             {$unwind : '$names'},
 *                             {$group : {_id: '$names', counter: {$sum: 1}}},
 *                             {$sort : {counter: -1}},
 *                             {$limit : 10});
 * </p>
 */
@Test
public void shouldFindThe10MostCommonNames() {
    //GIVEN
    CollectionManager.cleanAndFill(mongoTemplate.getDb(), "name_days.json", NameData.COLLECTION_NAME);
    int limit = 10;

    //WHEN
    AggregationResults<AggregatedNameData> aggregationResult = mongoTemplate.aggregate(
            Aggregation.newAggregation(NameData.class, Aggregation.project("names").andExclude("_id"),
                    Aggregation.unwind("names"), Aggregation.group("names").count().as("counter"),
                    Aggregation.sort(Sort.Direction.DESC, "counter"), Aggregation.limit(limit)),
            AggregatedNameData.class);

    //THEN
    assertThat(aggregationResult.getMappedResults()).hasSize(10);
    assertThat(aggregationResult.getMappedResults().get(0)).isEqualTo(new AggregatedNameData("Jana", 21));

}

From source file:com.handu.open.dubbo.monitor.DubboMonitorService.java

/**
 * ?//w  w w.  ja v  a  2s . c o m
 *
 * @param dubboInvoke
 */
public List<DubboInvoke> countDubboInvoke(DubboInvoke dubboInvoke) {
    if (StringUtils.isEmpty(dubboInvoke.getService())) {
        logger.error("???");
        throw new RuntimeException("???");
    }

    TypedAggregation<DubboInvoke> aggregation = Aggregation.newAggregation(DubboInvoke.class,
            Aggregation.match(Criteria.where("service").is(dubboInvoke.getService()).and("method")
                    .is(dubboInvoke.getMethod()).and("type").is(dubboInvoke.getType()).and("invokeDate")
                    .gte(dubboInvoke.getInvokeDateFrom()).lte(dubboInvoke.getInvokeDateTo())),
            Aggregation
                    .project("service", "method", "type", "success", "failure", "elapsed", "maxElapsed",
                            "maxConcurrent", "invokeTime")
                    .andExpression("(invokeTime / " + dubboInvoke.getTimeParticle() + ") * "
                            + dubboInvoke.getTimeParticle())
                    .as("invokeTime"),
            Aggregation.group("service", "method", "type", "invokeTime").sum("success").as("success")
                    .sum("failure").as("failure").sum("elapsed").as("elapsed").max("maxElapsed")
                    .as("maxElapsed").min("maxConcurrent").as("maxConcurrent"),
            Aggregation.sort(Sort.Direction.ASC, "invokeTime"));
    AggregationResults<DubboInvoke> result = mongoTemplate.aggregate(aggregation, "dubboInvoke",
            DubboInvoke.class);
    return result.getMappedResults();
}