2017-02-21 60 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

我沒有收到任何東西。它不顯示任何錯誤,但我沒有得到任何結果 –