聚合 和 分组聚合:
PlayMorphia 给开发者提供了基于models的组合和分组的友好接口
设想你定义了一个model,class Sales:
@Entity public class Sales extends Model { public String employeeId; public String department; public String region; public int amount; }
long total = Sales.count(); // also Sales.q().count(); long cntIT = Sales.q().filter("department", "IT").count(); long cntAU = Sales.q().filter("region", "AU").count(); long cntAuIt = Sales.find("region, department", "AU", "IT").count();
long sum = Sales._sum("amount"); // also Sales.q().sum("amount"); long sumIT = Sales.find("department", "IT").sum("amount"); long sumAU = Sales.find("region", "AU").sum("amount"); long sumAuIt = Sales.find("region department", "AU", "IT").sum("amount");
long max = Sales._max("amount"); // also Sales.q().max("amount"); long maxIT = Sales.find("department", "IT").max("amount"); long maxAU = Sales.find("region", "AU").max("amount"); long maxAuIt = Sales.find("region department", "AU", "IT").max("amount");
long min = Sales._min("amount"); // also Sales.q().min("amount"); long minIT = Sales.find("department", "IT").min("amount"); long minAU = Sales.find("region", "AU").min("amount"); long minAuIt = Sales.find("region department", "AU", "IT").min("amount");
每一个聚合都会对应一个分组聚合的接口,就像SQL中的group by语句
分组计数:
// group by region AggregationResult byRegion = Sales.groupCount("region"); System.out.println("AU count: " + byRegion.get("region", "AU"); // group by department AggregationResult byDep = Sales.groupCount("department"); System.out.println("IT count: " + byDep.get("department", "IT"); // group by region and department AggregationResult byRegionDep = Sales.groupCount("region, department"); System.out.println("IT count: " + byRegionDep.get("department, region", "IT", "AU");
// group by region AggregationResult byRegion = Sales.groupSum("region"); System.out.println("AU sum: " + byRegion.get("region", "AU"); // group by department AggregationResult byDep = Sales.groupSum("department"); System.out.println("IT sum: " + byDep.get("department", "IT"); // group by region and department AggregationResult byRegionDep = Sales.groupSum("region, department"); System.out.println("IT sum: " + byRegionDep.get("department, region", "IT", "AU");
// group by region AggregationResult byRegion = Sales.groupMax("region"); System.out.println("AU max: " + byRegion.get("region", "AU"); // group by department AggregationResult byDep = Sales.groupMax("department"); System.out.println("IT max: " + byDep.get("department", "IT"); // group by region and department AggregationResult byRegionDep = Sales.groupMax("region, department"); System.out.println("IT max: " + byRegionDep.get("department, region", "IT", "AU");
// group by region AggregationResult byRegion = Sales.groupMin("region"); System.out.println("AU min: " + byRegion.get("region", "AU"); // group by department AggregationResult byDep = Sales.groupMin("department"); System.out.println("IT min: " + byDep.get("department", "IT"); // group by region and department AggregationResult byRegionDep = Sales.groupMin("region, department"); System.out.println("IT min: " + byRegionDep.get("department, region", "IT", "AU");