欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 操作mongoDB执行group by

程序员文章站 2022-03-05 13:05:33
...

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

Java代码  java 操作mongoDB执行group by
            
    
    博客分类: mongodb数据库
  1. {user_id,  
  2.  ......,  
  3.  consume{  
  4.     ....,  
  5.     time,  
  6.     ....  
  7.   },  
  8. ...}  



查询的结果集是 

Java代码  java 操作mongoDB执行group by
            
    
    博客分类: mongodb数据库
  1. > db.consume.find({"consume.time.":{$gt:"0"}},{_id:0,user_id:1,"consume.time":1}).sort({"consuem.time":1}).limit(5);  
  2. "consume" : { "time" : "1314583316" }, "user_id" : "34800268" }  
  3. "consume" : { "time" : "1314583319" }, "user_id" : "67400937" }  
  4. "consume" : { "time" : "1314583321" }, "user_id" : "130041511" }  
  5. "consume" : { "time" : "1314583328" }, "user_id" : "4450046611" }  
  6. "consume" : { "time" : "1314583336" }, "user_id" : "20036266" }  



执行mongo的SQL大概是 

Java代码  java 操作mongoDB执行group by
            
    
    博客分类: mongodb数据库
  1. db.consume.group({ key:{"user_id":true} ,cond:{"consume.time":{$gt:"1314583316",$lt:"1314583336"}},initial:{co:0},reduce:function(oj,pr){pr.co++}  } )  



java代码是 

Java代码  java 操作mongoDB执行group by
            
    
    博客分类: mongodb数据库
  1. DBCollection userSColl = MongoDBUtils.getDBCollection("consume");  
  2. BasicDBObject key = new BasicDBObject("user_id",true);  
  3. BasicDBObject cond = new BasicDBObject("consume.time",new BasicDBObject("$gt","1314583316").append("$lt""1314583336"));  
  4.     BasicDBObject initial = new BasicDBObject("cou",0);  
  5. String reduce = "function(obj,pre){pre.cou++}";  
  6. BasicDBList returnList = (BasicDBList)userSColl.group(key, cond, initial, reduce);  


然后去一下size 

看了下mongo的doc发现还有 

Java代码  java 操作mongoDB执行group by
            
    
    博客分类: mongodb数据库
  1. List list = userSColl.distinct("user_id"new BasicDBObject("consume.time",new BasicDBObject("$gt","1314583316").append("$lt""1314583336")));  

 

转自: http://dasimm.iteye.com/blog/1632959