0

我有一个收藏:

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

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

4

2 回答 2

0

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

于 2014-01-10T21:09:04.183 回答
0

在这个工作示例中,MessageEntry 代表消息,而 linf 代表组:

    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;
于 2014-01-16T19:45:46.373 回答