java 操作mongoDB执行group by

最近公司要用Mongodb,学习了一下。
关于mongo的group by的用法有一个实例,写下来防止时间长了忘了。
具体的要求是要查询一段时间内消费的会员的总数,要求去重
表结构大致是

{user_id,
......,
consume{
....,
time,
....
},
...}


查询的结果集是

> db.consume.find({"consume.time.":{$gt:"0"}},{_id:0,user_id:1,"consume.time":1}).sort({"consuem.time":1}).limit(5);
{ "consume" : { "time" : "1314583316" }, "user_id" : "34800268" }
{ "consume" : { "time" : "1314583319" }, "user_id" : "67400937" }
{ "consume" : { "time" : "1314583321" }, "user_id" : "130041511" }
{ "consume" : { "time" : "1314583328" }, "user_id" : "4450046611" }
{ "consume" : { "time" : "1314583336" }, "user_id" : "20036266" }


执行mongo的SQL大概是

db.consume.group({ key:{"user_id":true} ,cond:{"consume.time":{$gt:"1314583316",$lt:"1314583336"}},initial:{co:0},reduce:function(oj,pr){pr.co++} } )


java代码是

DBCollection userSColl = MongoDBUtils.getDBCollection("consume");
BasicDBObject key = new BasicDBObject("user_id",true);
BasicDBObject cond = new BasicDBObject("consume.time",new BasicDBObject("$gt","1314583316").append("$lt", "1314583336"));
BasicDBObject initial = new BasicDBObject("cou",0);
String reduce = "function(obj,pre){pre.cou++}";
BasicDBList returnList = (BasicDBList)userSColl.group(key, cond, initial, reduce);

然后去一下size

看了下mongo的doc发现还有

List list = userSColl.distinct("user_id", new BasicDBObject("consume.time",new BasicDBObject("$gt","1314583316").append("$lt", "1314583336")));


不过不知道有没有直接求出count的方法,研究下如果有再补上


参考文档是:http://www.mongodb.org/display/DOCS/Aggregation
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值