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 应用程序一直运行,我假设您是根据您提到的堆栈运行的。

附:如果您打算一直运行它,请查看foreverpm2 节点模块。

如果不是这种情况,请坚持接受的答案。

【讨论】:

【参考方案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 函数

NGXS:有没有办法在一个动作完成后返回一个特定的值

有没有办法在一段时间后重置 mongodb 数据库的所有集合?

有没有办法从 ASC 文件中逐行读取并在特定子字符串后检查它?

有没有办法在使用联系表 7 付款后重定向到特定的感谢页面?