У меня есть коллекция:Как группировать по счету в морфию?
public class Message {
@Id
ObjectId id;
String group;
}
Мне нужно подсчитать количество сообщений в каждой группе. Можно ли избежать повторения всей коллекции?
У меня есть коллекция:Как группировать по счету в морфию?
public class Message {
@Id
ObjectId id;
String group;
}
Мне нужно подсчитать количество сообщений в каждой группе. Можно ли избежать повторения всей коллекции?
Вот в этом рабочем примере 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;
Язык запросов в монго и, следовательно, морфия, на самом деле не поддерживает это. Однако структура агрегации является хорошей новостью. Плохая новость (почти) n заключается в том, что морфия еще не поддерживает скопления. На самом деле у меня есть поддержка, построенная на ветке, но она зависит от версии java драйвера 2.12. Вот вопрос отслеживания этой функции: https://github.com/mongodb/morphia/issues/449
Извините за глупый вопрос. Так можно ли это сделать с помощью запроса mongodb без итерации в java? Где я могу увидеть пример? Thanx. –