2017-01-30 2 views
1

У меня есть список твитов, который содержит три поля, твит id, topicIdTag и тип. тип имеет три разных значения. Я получаю результат, но в дальнейшем хочу получить подсчет каждого типа. Моя модель и код запроса выглядят следующим образом.Сумма 3 разных значения отдельно MongoDb

model : { 
     TopicIdTag : String, 
     TweetId : String, 
     type :String //Positive,negative,neutral 
    }, 

db.collection("myTweets").aggregate([ 
            { 
            $group: { 
             _id: { 
              TopicIdTag : "$TopicIdTag", 
              TweetId : "$TweetId", 
             }, 
             count: { $sum: 1 } 
            } 
            }, 
            { $match: { count: { $gt: 0 , $lt : 5 } } }, 
           // Then sort 
            { "$sort": { "count": -1 } } 
           ], (err, result) => { 
            if (err) { 
             console.log(err); 
            } 
            res.status(200).send(result); 
           }); 

     }); 

Этот запрос дает мне общее количество твитов группы по id. запрос должен также возвращать, сколько временного типа было положительным, отрицательным и нейтральным в определенном идентификаторе твита.

+0

добавления типа в стадии $ группа должна дать вам количество каждого типа, но если честно, я не думаю, что я uderstand, что происходит, почему whould группировать по TweetId? Разве не уникально? – lascort

+0

Один tweetID имеет несколько записей. есть некоторые другие записи, которые я пропустил здесь –

ответ

0

Вы можете обновить существующий $group включить type и подсчитывают type и добавить еще одну группу с $addtoSet добавить одну запись на каждый type и count и общего количества по TopicIdTag & TweetId.

db.collection("tweets").aggregate([{ 
    $group: { 
     _id: { 
      Time: "$Time", 
      TopicIdTag: "$TopicIdTag", 
      TweetId: "$TweetId", 
      TweetText: "$TweetText", 
      UserName: "$UserName", 
      UserScreenname: "$UserScreenname", 
      sentimentNumber: "$sentimentNumber", 
      setimentText: "$setimentText", 
      //user feed back type 
      type: "$type" 
     }, 
     count: { 
      $sum: 1 
     } 
    } 
}, { 
    $group: { 
     _id: { 
      Time: "$_id.Time", 
      TopicIdTag: "$_id.TopicIdTag", 
      TweetId: "$_id.TweetId", 
      TweetText: "$_id.TweetText", 
      UserName: "$_id.UserName", 
      UserScreenname: "$_id.UserScreenname", 
      sentimentNumber: "$_id.sentimentNumber", 
      setimentText: "$_id.setimentText" 
     }, 
     typeAndCount: { 
      $addToSet: { 
       type: "$_id.type", 
       count: "$count" 
      } 
     }, 
     totalCount: { 
      $sum: 1 
     } 
    } 
}, { 
    $match: { 
     totalCount: { 
      $gt: 0, 
      $lt: 5 
     } 
    } 
}]) 
+0

Я получаю пустую строку. Я делаю то, что я делаю. Я обновил свой запрос .. проверьте его. –

+0

Обновленный ответ. Вы пропустили ссылку '_id' в последней группе. Посмотрите, работает ли это. – Veeram

+0

Ваш запрос работает отлично. еще одно значение totalCount дает общее количество типов, а не фактическое количество основной группы. как я могу получить, что один для счета exame должен быть 24, if (type1 = 11, type2 = 15) –

Смежные вопросы