Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在morphia中按计数分组?_Java_Mongodb_Morphia_Nosql Aggregation - Fatal编程技术网

Java 如何在morphia中按计数分组?

Java 如何在morphia中按计数分组?,java,mongodb,morphia,nosql-aggregation,Java,Mongodb,Morphia,Nosql Aggregation,我有一个收藏: public class Message { @Id ObjectId id; String group; } 我需要计算每个组的邮件数。是否可以避免遍历整个集合 mongo中的查询语言以及morphia并不真正支持这一点。然而,聚合框架确实如此,这是一个好消息。坏消息是morphia还不支持聚合。实际上,我在一个分支上构建了支持,但它依赖于java驱动程序的2.12版本。以下是跟踪此功能的问题:在此工作示例中,MessageEntry代表Message

我有一个收藏:

public class Message {
    @Id
    ObjectId id;
    String group;
}

我需要计算每个组的邮件数。是否可以避免遍历整个集合

mongo中的查询语言以及morphia并不真正支持这一点。然而,聚合框架确实如此,这是一个好消息。坏消息是morphia还不支持聚合。实际上,我在一个分支上构建了支持,但它依赖于java驱动程序的2.12版本。以下是跟踪此功能的问题:

在此工作示例中,MessageEntry代表Message,linf代表group:

    DBCollection myColl = ds.getCollection(MessageEntry.class);
    DBObject key = new BasicDBObject("linf",true);
    DBObject initial = new BasicDBObject("cnt",true);
    String reduce = "function(item,prev){prev.cnt+=1;}";

    DBObject group = myColl.group(key, null, initial, reduce);

    HashMap<String,Long> ret = new HashMap();
    for(String k:group.keySet()){
        BasicDBObject l = (BasicDBObject) group.get(k);
        DBRef dbRef = (DBRef) l.get("linf");
        Linf linf = ds.get(Linf.class,dbRef.getId() );
        Double cnt = (Double) l.get("cnt");
        ret.put(linf.limad,cnt.longValue());
    }
    return ret;
DBCollection myColl=ds.getCollection(MessageEntry.class);
DBObject key=newBasicDBObject(“linf”,true);
DBObject initial=新的基本对象(“cnt”,true);
String reduce=“function(item,prev){prev.cnt+=1;}”;
DBObject group=myColl.group(key,null,initial,reduce);
HashMap ret=新的HashMap();
对于(字符串k:group.keySet()){
BasicDBObject l=(BasicDBObject)group.get(k);
DBRef DBRef=(DBRef)l.get(“linf”);
Linf Linf=ds.get(Linf.class,dbRef.getId());
双cnt=(双)l.get(“cnt”);
ret.put(linf.limad,cnt.longValue());
}
返回ret;

很抱歉这个愚蠢的问题。那么,是否可以通过对mongodb的请求而不在java中进行迭代来实现这一点呢?在哪里可以看到示例?塔克斯。