Javascript 在mongo中插入文档后根据条件发送电子邮件
我有一个将文档插入mongo集合的api。根据插入文档的时间,我需要在插入时间后24小时发送电子邮件,并在插入时间后48小时发送短信。我计划使用_id查找插入时间 我的问题是,解决这个问题的最佳方法是什么?我想到的一个解决方案是每分钟运行一个脚本,查找24小时和48小时前创建的文档Javascript 在mongo中插入文档后根据条件发送电子邮件,javascript,mongodb,email,database,Javascript,Mongodb,Email,Database,我有一个将文档插入mongo集合的api。根据插入文档的时间,我需要在插入时间后24小时发送电子邮件,并在插入时间后48小时发送短信。我计划使用_id查找插入时间 我的问题是,解决这个问题的最佳方法是什么?我想到的一个解决方案是每分钟运行一个脚本,查找24小时和48小时前创建的文档 由于我一直在查询数据库,我觉得这可能是一种过分的做法,是否有更好的解决方案,或者使用mongo实现这一目的根本是错误的?如果脚本失败一个小时,您就不会发送在这60分钟内应该发送的邮件。您应该为邮件保留一个标签,使其具
由于我一直在查询数据库,我觉得这可能是一种过分的做法,是否有更好的解决方案,或者使用mongo实现这一目的根本是错误的?如果脚本失败一个小时,您就不会发送在这60分钟内应该发送的邮件。您应该为邮件保留一个标签,使其具有容错性 这可能是一个更好的主意:在每个文档中,都有名为
isMailSent24
和isMailSent48
的字段。插入时,您将始终使用'isMailSent24':false和'isMailSent48':false进行插入。显然,这些文件的邮件还没有发出
您的脚本每分钟都会运行,并且应该遵循以下步骤:
查找带有'isMailSent24':false和now-creationTime>24小时的文档
这将返回我们在24小时内还没有发送邮件的文档,并且在创建后已经超过24小时了。这意味着是时候给他们发邮件了。大多数情况下,now-creationTime
将是24小时零1分钟,因为脚本每分钟运行一次。但是,如果您的脚本失败30分钟,它仍然会发送24小时30分钟前创建的文档的邮件。这是容错的,而且是更好的实践
把那些文件寄出去
将它们修改为“isMailSent24”:true
对于“isMailSent48”
,也有同样的例行程序。如果脚本在一小时内失败,您将无法发送在这60分钟内本应发送的邮件。您应该为邮件保留一个标签,使其具有容错性
这可能是一个更好的主意:在每个文档中,都有名为isMailSent24
和isMailSent48
的字段。插入时,您将始终使用'isMailSent24':false和'isMailSent48':false进行插入。显然,这些文件的邮件还没有发出
您的脚本每分钟都会运行,并且应该遵循以下步骤:
查找带有'isMailSent24':false和now-creationTime>24小时的文档
这将返回我们在24小时内还没有发送邮件的文档,并且在创建后已经超过24小时了。这意味着是时候给他们发邮件了。大多数情况下,now-creationTime
将是24小时零1分钟,因为脚本每分钟运行一次。但是,如果您的脚本失败30分钟,它仍然会发送24小时30分钟前创建的文档的邮件。这是容错的,而且是更好的实践
把那些文件寄出去
将它们修改为“isMailSent24”:true
对于'isMailSent48'
,也有相同的例程。为此,您可以使用TTL索引维护另一个集合25小时
将条目放入主集合时,将一个对应的文档插入到新集合中,并在其中插入一个日期字段,该字段上的TTL索引应为25小时
现在,每15分钟运行一次计划程序,签出24小时前创建的所有文档,验证该文档未发送邮件,并尝试发送邮件。一旦能够发送邮件,请更新已发送邮件的文档,并使用TTL索引更新日期字段。现在,24小时后,我们会再次拿起它发送短信,但这一次不更新日期字段,所以文件将被删除自己时,它的目的是填补
这样做的好处是,您的主集合将不受每分钟大量查询调用和后续更新的影响。第二个好处是,在邮件和短信都发送后,文档将自行删除,因此无需担心清理
现在有一些我必须提到的退步,因为你从每分钟改为15分钟,会有一个延迟,而且不会精确到24小时,我认为在邮件和短信的情况下,这些延迟是可以接受的。或者您可以将频率更改为5分钟。另一件事是,我没有想到失败的情况,如邮件发送不成功,也许你可以重新拿起,但在任何情况下,你应该更新与TTL的日期字段,否则文件将被删除之前,你发送短信24小时后 为此,您可以使用TTL索引维护另一个集合25小时
将条目放入主集合时,将一个对应的文档插入到新集合中,并在其中插入一个日期字段,该字段上的TTL索引应为25小时
现在,每15分钟运行一次计划程序,签出24小时前创建的所有文档,验证该文档未发送邮件,并尝试发送邮件。一旦能够发送邮件,请更新已发送邮件的文档,并使用TTL索引更新日期字段。现在,24小时后,我们会再次拿起它发送短信,但这一次不更新日期字段,所以文件将被删除自己时,它的目的是填补
这样做的好处是,您的主集合将不受每分钟大量查询调用和后续更新的影响。第二个好处是,在邮件和短信都发送后,文档将自行删除,因此无需担心清理
现在有一些我必须提到的退步,因为你从每分钟改为15分钟,会有一个延迟,而且不会是24小时,我想在邮件和短信的情况下会有这些延迟