我有一个集合:
public class Message {
@Id
ObjectId id;
String group;
}
我需要计算每组的消息数量。是否有可能避免遍历整个集合?
答案 0 :(得分:0)
mongo中的查询语言,因此morphia,并不真正支持它。然而,聚合框架确实是好消息。 (几乎)坏消息是,morphia(尚未)支持聚合。我实际上在分支上构建了支持,但它依赖于2.12版本的java驱动程序。以下是跟踪此功能的问题:https://github.com/mongodb/morphia/issues/449
答案 1 :(得分:0)
在这个工作示例中,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;