首页 > 解决方案 > 使用 nodejs 安排每天在我的 mongodb 上运行的任务

问题描述

我一直在尝试做一些听起来很容易但无法让它发挥作用的事情。我希望每天都调用一个函数,这样它就会改变我数据库中的一个值。为此,我使用 js 中的 setInterval() 函数

setInterval(()=>reset(),10000)

我的重置功能在哪里

function reset(){
  console.log("here")
  try{
      const user =  Users.updateMany(
          {$set : { voteAverage : 1 }}
      );
      console.log("good")
  }catch(err){
      res.json({message: err})
      console.log(err)
  }
}

我在控制台中恢复了良好状态,但我的数据库没有改变。我可能会以错误的方式这样做,但我真的不知道该怎么做。起初,我在修补路由时尝试重置所有内容,并且它起作用了。但是现在我不想使用路由只是想让它像这样运行。这甚至可能吗?

提前致谢

标签: node.jsmongodbexpresssetinterval

解决方案


我在这里看到两个问题

  • updateMany是异步操作,但您没有等待它。因此,要么等待它并使您的函数异步,要么将其作为承诺返回。

  • updateMany有两个参数。第一个是过滤器,第二个是文档。我猜你没有提供任何过滤器。

像这样的东西

async function reset() {
  console.log("here");
  try {
    const user = await Users.updateMany(
      {"$set": {"voteAverage": 1}}
    );
    console.log("good");
  } catch (err) {
    res.json({"message": err});
    console.log(err);
  }
}

setInterval(async () => reset(), 10000);

推荐阅读