聚合运算

1.0.8版本增加的方法目前还没有简化,参数跟官方驱动是一致的。

建议在看这一章之前请先把MongoDB北大绿卡之Aggregation先过一遍

在Mongodb Plugin中,简化了聚合运算的使用,使你几乎可以不用学习成本的使用。我们来看下下面的例子:


MongoQuery query=new MongoQuery();
//先创建一个query对象,用于存放条件

query.use("student").eq("sex",1).descending("age").limit(10);
//查找student中性别为1且按年龄倒序的前十个

MongoAggregation aggregation=new MongoAggregation(query);
//创建聚合运算对象

logger.info(JSON.toJSONString(aggregation
.include("name","sex","age","teacherName") 
//输出的内容中只含有name、sex、age和teacherName

.projection() 
//如果是用了include、exclude、excludeId则必须加上

.lookup("teacher","teacherName","name","teacher")
//类似mysql的join查询,将teacherName字段中的值对应的teacher的name字段中的值的结果放在查询结果中的teacher字段中,这里是按照原生驱动放置的参数,有点绕~

.out("_output_")
//将结果输出到_output_集合中

.pipeline(聚合操作)
//放入官方驱动的Aggregates的方法生成的bson。

.aggregate()));
//开始运算

//我们来看下另一个求所有男生平均分数的例子

MongoQuery query=new MongoQuery();

query.use("student").eq("sex",1).descending("teacherName");
//根据老师名字倒序,由于是先检索排序再计算的,好的条件和排序可以加快运算速度。

MongoAggregation aggregation=new MongoAggregation(query);

logger.info(JSON.toJSONString(aggregation
.group("$teacherName",new MongoAccumulator().avg("result","$score"))
.aggregate()));
//在group中放置$字段名代表使用该表的这个字段来运划分不同的结果(如A老师和B老师下的学生的平均成绩),MongoAccumulator是MongoPlugin的封装好的公式,里面基本包含了mongodb java driver中的运算公式。在本例子中是计算平均数。以score字段为计算依据并将计算结果放入result字段中。

results matching ""

    No results matching ""