2017-01-10 14 views
0

の期間にわたって値の平均値を取得する:すべてのキーワードをまとめてグループ私が何をしたいのか私は、次のコレクション持っている時間

{ 
     "_id" : ObjectId("58503934034b512b419a6eab"), 
     "website" : "https://www.google.com", 
     "name" : "Google", 
     "keywords" : [ 
      "Search", 
      "Websites", 
     ], 
     "tracking" : [ 
      { 
       "_id" : ObjectId("5874aa1df63258286528598d"), 
       "position" : 0, 
       "created_at" : ISODate("2017-01-1T09:32:13.831Z"), 
       "real_url" : "https://www.google.com", 
       "keyword" : "Search" 
      }, 
      { 
       "_id" : ObjectId("5874aa1ff63258286528598e"), 
       "keyword" : "Page", 
       "real_url" : "https://www.google.com", 
       "created_at" : ISODate("2017-01-1T09:32:15.832Z"), 
       "found_url" : "https://google.com/", 
       "position" : 3 
      }, 
      { 
       "_id" : ObjectId("5874aa21f63258286528598f"), 
       "keyword" : "Search", 
       "real_url" : "https://www.foamymedia.com", 
       "created_at" : ISODate("2017-01-2T09:32:17.017Z"), 
       "found_url" : "https://google.com/", 
       "position" : 2 
      }, 

      { 
       "_id" : ObjectId("5874aa21f63258286528532f"), 
       "keyword" : "Search", 
       "real_url" : "https://www.google.com", 
       "created_at" : ISODate("2017-01-2T09:32:17.017Z"), 
       "found_url" : "https://google.com/", 
       "position" : 1 
      },  
     ] 
    } 

をされており、一定期間にわたって、その特定の日の平均値を計算。

それでは、例えばとしましょう:間

:2017年1月1日2017年1月31日に次のキーワードを追跡した。

2017-01-01: 
    'Seach' => 1, 
    'Page' => 3, 
Average = 2 

2017-01-02: 
    'Search' => 4, 
    'Page' => 6, 
Average = 5 

.... 

だから、最終的な結果では、私は終了してしまいます(この場合):

{ 
    "_id" : ObjectId("5874dccb9cd90425e41b7c54"), 
    "website" : "www.google.com", 
    "averages" : [ 
     "2", 
     "5" 

    ] 
} 

答えて

1

これを試すことができます。

$unwind$sortの後にtracking.keywordtracking.created_atが続きます。 $groupによってdayすべてのカテゴリにわたって日の平均を取得します。最終$groupは、ウェブサイトのすべての日の平均値を配列にプッシュします。

db.website.aggregate([{ 
    $match: { 
     "_id": ObjectId("58503934034b512b419a6eab") 
    } 
}, { 
    $lookup: { 
     from: "seo_tracking", 
     localField: "website", 
     foreignField: "real_url", 
     as: "tracking" 
    } 
}, { 
    $unwind: "$tracking" 
}, { 
    $sort: { 
     "tracking.keyword": 1, 
     "tracking.created_at": -1 
    } 
}, { 
    $group: { 
     _id: { 
      $dayOfMonth: "$tracking.created_at" 
     }, 
     "website": { 
      $first: "$website" 
     }, 
     "website_id": { 
      $first: "$_id" 
     }, 
     "averageByDay": { 
      $avg: "$tracking.position" 
     } 
    } 
}, { 
    $group: { 
     "_id": "$website_id", 
     "website": { 
      $first: "$website" 
     }, 
     "average": { 
      $push: "$averageByDay" 
     } 
    } 
}]); 
関連する問題