mongo学习笔记(四):java中使用group

在java中使用mongo的group

目标:

private Mongo mg = null;
private DB db;
private DBCollection dbCollection;
    
public void init(String IP,int port,String DB) {
    try {
        mg = new Mongo(IP,port);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (MongoException e) {
        e.printStackTrace();
    }
    //获取DB;如果默认没有创建,mongodb会自动创建
    db = mg.getDB(DB);
}

使用group

public DBObject group(String start,String end,int age)
{
    dbCollection = db.getCollection("person");
    BasicDBObject cond= new BasicDBObject();
    BasicDBObject dt= new BasicDBObject();
    dt.put("$gte",fromISODate(start));//大于等于
    dt.put("$lt",fromISODate(end));//小于
    cond.put("dt", dt);
    cond.put("age",age);

    BasicDBObject key = new BasicDBObject("name", true);
    BasicDBObject initial = new BasicDBObject("person",new ArrayList());
    String reduce = "function(doc,out){out.person.push(doc.name);}";
    String finalize = "function(out){out.count=out.person.length;}";
        
    DBObject list = dbCollection.group(key, cond, initial, reduce, finalize);
        
    return list;
} 

 mongo中时间格式是IOSDate

例如:"2015-12-04 00:00:00"

直接用String转Date =>"2015-12-03T16:00:00Z"

而我想转成"2015-12-04T00:00:00Z",,比目标少了8小时(时区)

目前没有什么办法,非常屌丝的写了以下方法,有更好的方法请务必告诉我,谢谢!!

public static Date fromISODate(String time){   
    Date date=formatDate(time);  
    Calendar ca=Calendar.getInstance();  
    ca.setTime(date);  
    ca.add(Calendar.HOUR_OF_DAY, 8);  
    return ca.getTime();  
} 
    
public static Date formatDate(String time){  
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    //sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
    try {  
        return sdf.parse(time);  
    } catch (ParseException e) {  
        e.printStackTrace();  
        return null;  
    }  
}  

最后,调用

public static void main(String[] args){
    // TODO Auto-generated method stub
    mongoDB4CRUD.init("192.68.68.83", 19000, "test");
    DBObject list = mongoDB4CRUD.group("2015-01-01 00:00:00", "2015-12-01 00:00:00",25);
    JSONArray jsonArray= JSONArray.fromObject(list);
    for(int i=0;i<jsonArray.size();i++)
    {
        JSONObject jo = (JSONObject) jsonArray.get(i);
        System.out.println(jo.get("name").toString());
    }
}         

 以上代码经过我部分手动修改,不保证编译通过,仅作参考╮(╯▽╰)╭

原文地址:https://www.cnblogs.com/margin-gu/p/5019394.html