You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js实现每24小时自动更新MongoDB并同步第三方API新账户

实现每日自动同步第三方API数据到MongoDB的方案

核心改进点

  • 替换重复插入逻辑为更新/插入(Upsert),确保只同步新增或有变化的账户
  • 引入定时任务工具,实现每24小时自动执行同步

步骤1:安装依赖

先安装定时任务所需的node-cron包:

npm install node-cron

步骤2:优化同步逻辑与定时任务整合

修改后的完整代码如下:

const fetch = (...args) =>
  import('node-fetch').then(({ default: fetch }) => fetch(...args));
const mongoose = require('mongoose');
const cron = require('node-cron');

// 数据库连接
mongoose.connect("mongodb://mymongoDBURL/mymongoDBTABLE")
  .then(() => console.log('MongoDB连接成功'))
  .catch(err => console.error('MongoDB连接失败:', err));

const postSchema = new mongoose.Schema({
  id: {
    type: Number,
    required: true,
    unique: true // 新增唯一约束,从数据库层面避免ID重复
  },
  name: {
    type: String,
    required: true
  },
  status: {
    type: String,
    required: false
  },
});

const Post = mongoose.model('players', postSchema);

// 同步数据的核心函数
async function syncPlayers() {
  try {
    const response = await fetch("http://localhost:3008/api/players");
    if (!response.ok) throw new Error(`API请求失败: ${response.status}`);
    
    const data = await response.json();
    const players = data.players || [];

    // 批量处理每个玩家数据(Upsert:存在则更新,不存在则插入)
    for (const player of players) {
      await Post.findOneAndUpdate(
        { id: player.id }, // 查询条件:根据ID匹配已有数据
        { 
          name: player.name,
          status: player.status 
        }, // 要更新/插入的字段内容
        { upsert: true, new: true } // upsert开启插入功能,new返回更新后的文档
      );
    }

    console.log(`数据同步完成,共处理${players.length}个玩家`);
  } catch (err) {
    console.error('同步过程出错:', err);
  }
}

// 配置定时任务:每24小时执行一次(每天凌晨0点)
// 定时规则说明:秒 分 时 日 月 周,0 0 * * * 表示每天0点0分触发
cron.schedule('0 0 * * *', () => {
  console.log('开始执行每日数据同步任务...');
  syncPlayers();
});

// 可选:服务启动时立即执行一次同步,避免等待首次定时触发
syncPlayers();

关键细节说明

  1. 唯一约束:Schema中给id字段添加unique: true,防止数据库出现重复ID的文档
  2. Upsert逻辑:findOneAndUpdate的upsert: true参数是核心,既可以插入新账户,也能更新已有账户的最新信息
  3. 错误捕获:通过try/catch处理API请求、数据库操作的异常,避免单个错误导致整个定时任务崩溃
  4. 定时规则调整:如果需要修改执行时间,可修改cron.schedule的第一个参数,比如0 12 * * *表示每天中午12点执行

内容的提问来源于stack exchange,提问作者yandry santana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:21:12