2017-02-21 72 views
0

我正在尝试使用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" } 
    ] 
) 

我想将这两项行动合为一体。我试图加入它只copyng一个里面,但它不工作。

非常感谢,

+1

什么是您的MongoDB服务器版本? – chridam

+0

我有版本3.2.4 –

回答

1

您可以尝试下面的聚合。唯一要注意的是包含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" 
    }] 
) 
+0

嗨,它不工作,它创建集合,但它是空的。我的mongo版本是3.2.4 –

+0

如果你离开''daily_tweets“ }',你能验证并看到你得到了什么吗? – Veeram

+0

我没有收到任何东西。它不显示任何错误,但我没有得到任何结果 –