3个不同值的总和分别为MongoDb

时间:2017-01-30 14:09:30

标签: mongodb mongodb-query aggregation-framework

我有推文列表,其中包含三个字段,tweet id,topicIdTag和type。 type有三个不同的值。我得到了结果,但我想进一步计算每种类型。我的模型和查询代码如下。

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给出总推文组数。查询还应返回特定推文ID中的正数,负数和中性的时间类型。

1 个答案:

答案 0 :(得分:0)

您可以更新现有的.Build()以包含$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
      }
  }
}])