morphia是谷歌的一个针对mongodb的数据化持久框架,现在貌似已经迁移到mongodb中
morphia induction
morphia api for java
关于mongodb的介绍不在这里展示,直接进入主题:采用morphia实现对mongodb的复杂group统计
需求:有一个用户集合User,如下:
{
“_id” : ObjectId(“55bf10419d03fb1a88f990ba”),
“userName” : “user6”,
“password” : “123”,
“grade” : 98,
“classId” : 1,
“createTime” : ISODate(“2015-08-12T06:59:57.318Z”)
},
{
“_id” : ObjectId(“55d697fe3a6aae9affb43744”),
“userName” : “user”,
“password” : “123”,
“grade” : 30,
“classId” : 2,
“createTime” : ISODate(“2015-08-13T06:59:57.318Z”)
},
{
“_id” : ObjectId(“55ee48851db2fd2a72b1031f”),
“userName” : “user6”,
“password” : “123”,
“grade” : 43,
“classId” : 2,
“createTime” : ISODate(“2015-08-14T06:59:57.318Z”)
},
{
“_id” : ObjectId(“55ee517b1db2fd2a72b10320”),
“userName” : “user6”,
“password” : “124”,
“grade” : 24,
“classId” : 1,
“createTime” : ISODate(“2015-08-19T06:59:57.318Z”)
}
总共四条记录,现在的需求是:按userName和classId进行分组统计数量和总的grade,且成绩需要大于0,sql如下:
select userName,classId,count(*) as count,sum(case when grade> 0 then grade else 0 end) as totalGrade from Users where grade > 0 group by userName,classId order by userName
查看morphia的API如下图
可以知道用aggregation就好。
话不多说,上代码
MorphiaAggregation .java如下
package com.marstor.dms.base;
import static org.mongodb.morphia.aggregation.Group.first;
import static org.mongodb.morphia.aggregation.Group.grouping;
import static org.mongodb.morphia.aggregation.Group.id;
import static org.mongodb.morphia.aggregation.Group.sum;
import java.util.Iterator;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.aggregation.Accumulator;
import org.mongodb.morphia.aggregation.AggregationPipeline;
import org.mongodb.

本文介绍了如何利用morphia对mongodb进行复杂的group查询,以满足按userName和classId分组,统计数量和大于0的grade总和的需求。通过示例代码展示了MorphiaAggregation.java、User.java和期望结果集UserGroup.java的内容,强调了实际操作的简单与文档缺乏带来的挑战。
最低0.47元/天 解锁文章
887

被折叠的 条评论
为什么被折叠?



