使用聚合框架计算每天的推文和转发



我正在尝试使用Mongo中的聚合框架来计算每天转发和推文的数量,但是我有问题。我可以分开做,但是当我尝试使用查询时,我没有得到任何结果。

我使用下一个聚合框架每天获取转发的数量

    db.tweets.aggregate(
   [
    { $match: { "retweeted_status.id": {"$exists":true} }}
     {
       $group:
         {
           _id: { 
                day2: { $dayOfMonth: "$created_ts"}, 
                month2 : {$month : "$created_ts" },
                year2: { $year: "$created_ts" },
                },
           totalReTweetsPerDay: { $sum: 1 },
         }
     },
        { $match: { "retweeted_status.id": {"$exists":true} }}
   ]
)

我使用下一个代码每天获取推文数量

   db.tweets.aggregate(
       [
         {
           $group:
             {
               _id: { 
                    day: { $dayOfMonth: "$created_ts"}, 
                    month : {$month : "$created_ts" },
                    year: { $year: "$created_ts" },
                    },
               totalReTweetsPerDay: { $sum: 1 },

  }
     },
     {$sort : { _id : -1}},
     {$out : "daily_tweets" }
   ]
)

我想加入这两个操作。我试图加入它只在另一个内部浏览一个,但它不起作用。

非常感谢

您可以尝试以下聚合。唯一要注意的是ifNull操作员的包含,该操作员检查是否存在字段。

db.tweets.aggregate(
    [{
        $group: {
            _id: {
                day: {
                    $dayOfMonth: "$created_ts"
                },
                month: {
                    $month: "$created_ts"
                },
                year: {
                    $year: "$created_ts"
                },
            },
            totalReTweetsPerDay: {
                $sum: {
                    $cond: [{
                        $ifNull: ["$retweeted_status.id", false]
                    }, 1, 0]
                }
            },
            totalTweetsPerDay: {
                $sum: 1
            }
        }
    }, {
        $sort: {
            _id: -1
        }
    }, {
        $out: "daily_tweets"
    }]
)

最新更新