2017-02-06 6 views
1

Я сохраняю текущее время Date.now() каждый раз, когда я добавляю документ в коллекцию MongoDB. Скажем, эти 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).

Что было бы самым простым и быстрым способом для этой агрегации с использованием оболочки манго?

Спасибо!

ответ

0

Вы можете попробовать выполнить агрегацию.

$match, чтобы сохранить записи $lte, чем сегодня, $group по null и вычислить $sum считать отчет, $min (старые) дату и $project вычислить среднее путем деления общих отчетов и количество дней.

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

yeah change '_id: null' – Veeram

+0

Привет, я обновил свой вопрос, чтобы получить среднее среднесуточное значение при математической формуле. Можете ли вы помочь мне mongofy это? Заранее спасибо! – uncleCHEF