2017-02-06 2 views
1

ドキュメントをMongoDBコレクションに追加するたびに現在時刻を保存します。Date.now()のは、次の形式でこれらの3つのドキュメントを言ってみましょう:MongoDBは、コレクション内の記録されたドキュメントの平均日平均カウントを取得または取得します。

# Doc 1 
    { 
     date: ISODate("2017-01-25T09:47:40.000Z"), 
     reports: 5 
    } 
# Doc 2 
    { 
     date: ISODate("2017-01-24T09:47:40.000Z"), 
     reports: 5 
    } 
# Doc 3 
    { 
     date: ISODate("2017-01-23T09:47:40.000Z"), 
     reports: 5 
    } 

基本的には、数学の式は(total reports) divided by the (count of days from the oldest date until date today)です。

mongoシェルを使用してこの集計を行う最も簡単な方法は何ですか?

ありがとうございます!

答えて

0

以下の集計を試すことができます。 nullによって$group、レコードを今日より$lteを維持し、日間の合計レポートや数を割ることによって平均値を計算するレポート、$min(最古の)日付と$projectをカウントする$sumを計算する

$match

db.collection.aggregate({ 
    $match: { 
     date: { 
      $lt: new ISODate() 
     } 
    } 
}, { 
    $group: { 
     _id: null, 
     oldestDate: { 
      $min: "$date" 
     }, 
     sumReports: { 
      $sum: "$reports" 
     } 
    } 
}, { 
    $project: { 
     _id: 0, 
     avgReports: { 
      $divide: ["$sumReports", { 
       $divide: [{ 
        $subtract: [new ISODate(), "$oldestDate"] 
       }, 1000 * 60 * 60 * 24] 
      }] 
     } 
    } 
}) 
+0

ありがとうございました。すべてのレポートの日平均平均を取得したいので、グループ化したくない場合は、 '_id'のすべてを削除するだけです。 – uncleCHEF

+0

ええ、 '_id:null'を変更しました – Veeram

+0

こんにちは、私は、数学の公式を提供した平均一日平均を得るために私の質問を更新しました。あなたはそれをmongofy助けることができますか?ありがとうございました! – uncleCHEF

関連する問題