mongoDB有没有办法在特定时间后自己创建一个文档,比如一天?
Posted
技术标签:
【中文标题】mongoDB有没有办法在特定时间后自己创建一个文档,比如一天?【英文标题】:Is there a way in mongoDB to create a document itself after a specific time, say one day? 【发布时间】:2020-09-28 06:06:00 【问题描述】:我有两个名为 graphData 和 users 的集合。 'users' 集合具有存储用户信息的文档。 “graphData”最初有 10 个文档,其中包含一些关于过去 10 天用户数量的虚拟数据。 现在,我希望在 24 小时后自动触发一个查询,以查找当时的用户数量并将其添加到 graphData 并删除一个文档(使用 TTL 索引,我想通了)
请告诉是否有办法做到这一点。谢谢 我正在使用 MERN 堆栈(MongoDB、Express、ReactJS 和 NodeJS)
【问题讨论】:
你的系统是在linux上运行的吗? @Ifaruki 是的,我正在使用 linux 【参考方案1】:要添加来自@Ifaruki 的出色答案,您可以使用node-cron
之类的模块,这将确保您的代码不依赖于您正在运行的操作系统或云平台。
安排一些东西在特定时间运行很简单:
var cron = require('node-cron');
cron.schedule('* * * * *', () =>
console.log('running a task every minute');
);
但是请注意,这需要让您的 node+express 应用程序一直运行,我假设您是根据您提到的堆栈运行的。
附:如果您打算一直运行它,请查看forever
或pm2
节点模块。
如果不是这种情况,请坚持接受的答案。
【讨论】:
【参考方案2】:您可以使用 linux cron 作业每 24 小时执行一次特定文件。
你需要通过 SSH 连接到你的服务器,比如说 putty,然后输入
crontab -e
然后添加以下内容
5 0 * * * /usr/local/bin/node /home/somepath/example/script.js
这个 crontab 的意思是,午夜后每 5 分钟执行一次这个脚本。
对于测试,您可以使用
* * * * * /usr/local/bin/node /home/somepath/example/script.js
这个 cron 作业的意思是:每分钟执行一次这个脚本,你可以通过它首先测试你是否做对了一切,看看它是否有效
如果您使用的是 heroku,您可能会看到这个问题:Using Heroku Scheduler with Node.js
【讨论】:
如果我已将我的网络应用程序部署到 heroku 会怎样。我不能用这个方法对吗? 我从来没有使用过heroku,我有自己的VPS,所以我不知道。您可能会阅读 heroku 调度程序如何解决它。这可以帮助你***.com/questions/13345664/… @SukritKapil 我会将其添加到我的答案中以上是关于mongoDB有没有办法在特定时间后自己创建一个文档,比如一天?的主要内容,如果未能解决你的问题,请参考以下文章
在 Mongodb 数组中,有没有办法在特定元素位置之前/之后插入新元素
有没有办法用来自特定用户的推文触发 AWS lambda 函数
有没有办法在一段时间后重置 mongodb 数据库的所有集合?