2017-02-21 13 views
0

Я пытаюсь подсчитать количество ретвитов и твитов в день с использованием структур агрегации в монго, но у меня возникла проблема. Я могу сделать это отдельно, но когда я попытался сделать это только с помощью запроса, я не получаю никакого результата.Подсчитайте твиты и ретвиты в день с использованием структур агрегации

Я использовал следующую структуру агрегации, чтобы получить число ретвитов в день

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" } 
    ] 
) 

Я хотел бы объедините эти две операции в одну. Я попытался присоединиться к нему, только копируя один в другой, но он не работает.

Спасибо большое,

+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

Можете ли вы проверить и посмотреть, что получите, если вы оставите '{ $ out:" daily_tweets " }' out? – Veeram

+0

Я ничего не получаю. Он не показывает никаких ошибок, но я не получаю никакого результата. –

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