группировка более одного раза в монго

Я новичок в монго дб,

У меня есть следующий код в mysql:

SELECT sum(Sentiment)/count(*), sum(Intensity)/count(*), count(*) FROM omid.tweet 

и мне нужно преобразовать его в mongodb:

но меня действительно смущает группа, состоящая из более чем одного столбца, например, у меня есть:

// Now the $group operation
    DBObject groupFields = new BasicDBObject( "_id", "$?????");
    groupFields.put("average", new BasicDBObject( "$avg", "$intensity"));
    DBObject group = new BasicDBObject("$group", groupFields);

но, как вы можете видеть, я не знаю, по чему группировать, а также как получить среднее значение настроения. Кто-нибудь может помочь?


person Hamed Minaee    schedule 10.12.2014    source источник


Ответы (1)


Вам не нужно группировать более одного раза для того, чего вы пытаетесь достичь. Вы можете использовать $avg и $sum операторы агрегации aggregation framework:

db.collection.aggregate(
   [
     {
       $group:
         {
           _id: null,
           avgSentiment: { $avg: "$sentiment" },
           avgIntensity: { $avg: "$intensity" },
           count: { $sum: 1 }
         }
     }
   ]
)

Непроверенный эквивалент Java:

// $group in Java
DBObject groupFields = new BasicDBObject( "_id", null);
groupFields.put("avgSentiment", new BasicDBObject( "$avg", "$sentiment"));
groupFields.put("avgIntensity", new BasicDBObject( "$avg", "$intensity"));
groupFields.put("count", new BasicDBObject( "$sum", 1));
DBObject group = new BasicDBObject("$group", groupFields);

// Run aggregation
List<DBObject> pipeline = Arrays.asList(group);
AggregationOutput output = collection.aggregate(pipeline);
person Anand Jayabalan    schedule 10.12.2014
comment
Спасибо, но это результат: { _id : null , mediumSentiment : 0.0 , mediumIntensity : 0.0 , count : 222097} по какой-то причине среднее значение возвращается как null - person Hamed Minaee; 10.12.2014
comment
@HamedMinaee, у вас есть нулевые значения для полей intensity и sentiment в вашей коллекции? Или, может быть, поля не существуют в некоторых документах? Если это так, вы можете отфильтровать такие документы перед группировкой. - person Anand Jayabalan; 10.12.2014
comment
@HamedMinaee, на самом деле, даже с нулевыми/отсутствующими значениями в документах все работает отлично.. Я только что проверил.. Может быть, вы можете отредактировать свой вопрос и опубликовать образец документа из своей коллекции? - person Anand Jayabalan; 10.12.2014
comment
Привет еще раз, есть проблема, с которой я борюсь в течение 3 дней, не могли бы вы взглянуть, stackoverflow.com/questions/29015849/ - person Hamed Minaee; 17.03.2015