使用morphia实现对mongodb的复杂group查询

本文介绍了如何利用morphia对mongodb进行复杂的group查询,以满足按userName和classId分组,统计数量和大于0的grade总和的需求。通过示例代码展示了MorphiaAggregation.java、User.java和期望结果集UserGroup.java的内容,强调了实际操作的简单与文档缺乏带来的挑战。
摘要由CSDN通过智能技术生成

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如下图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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值