让我的mongoDB每天在特定时间收集数据?

时间:2015-11-11 02:04:19

标签: mongodb meteor

我正在构建一个从特定网站抓取数据的天气应用程序,但是在当天的某个时间由于我必须抓取数据的方式数据变得不准确。如果我可以在每天的某个时间收集数据,这将不是问题。

我的Meteor服务器是否有办法每天早上1点出去收集新数据并将信息存储在我可以全天使用的mongo数据库中?

2 个答案:

答案 0 :(得分:3)

查看percolate:synced-cron包。

https://atmospherejs.com/percolate/synced-cron

使用它你可以做类似的事情:

SyncedCron.add({
  name: 'Scrape weather data',
  schedule: function(parser) {
    // parser is a later.parse object
    return parser.text('at 1:00 am' );
  },
  job: function() {
    // 
    // scraping code
    //
    WeatherData.insert(scrapedData); //insert to MongoDB Collection

  }
});

SyncedCron.start();

答案 1 :(得分:2)

还有一个基于setTimeout函数的简单JavaScript解决方案:

function updateWeather() {
  // Update weather logic
}

/**
 * @returns {Number} ms till next day's 1 am
 */
function computeMsToNextWeatherUpdate() {
  const tomorrow = new Date();

  tomorrow.setDate(tomorrow.getDate() + 1);
  tomorrow.setHours(13); // 1 am
  tomorrow.setMinutes(0);
  tomorrow.setSeconds(0);

  return tomorrow.getTime() - Date.now();
}

function startWeatherUpdater() {
  updateWeather();

  setTimeout(startWeatherUpdater, computeMsToNextWeatherUpdate());
}

startWeatherUpdater();