Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在mongo中插入文档后根据条件发送电子邮件_Javascript_Mongodb_Email_Database - Fatal编程技术网

Javascript 在mongo中插入文档后根据条件发送电子邮件

Javascript 在mongo中插入文档后根据条件发送电子邮件,javascript,mongodb,email,database,Javascript,Mongodb,Email,Database,我有一个将文档插入mongo集合的api。根据插入文档的时间,我需要在插入时间后24小时发送电子邮件,并在插入时间后48小时发送短信。我计划使用_id查找插入时间 我的问题是,解决这个问题的最佳方法是什么?我想到的一个解决方案是每分钟运行一个脚本,查找24小时和48小时前创建的文档 由于我一直在查询数据库,我觉得这可能是一种过分的做法,是否有更好的解决方案,或者使用mongo实现这一目的根本是错误的?如果脚本失败一个小时,您就不会发送在这60分钟内应该发送的邮件。您应该为邮件保留一个标签,使其具

我有一个将文档插入mongo集合的api。根据插入文档的时间,我需要在插入时间后24小时发送电子邮件,并在插入时间后48小时发送短信。我计划使用_id查找插入时间

我的问题是,解决这个问题的最佳方法是什么?我想到的一个解决方案是每分钟运行一个脚本,查找24小时和48小时前创建的文档


由于我一直在查询数据库,我觉得这可能是一种过分的做法,是否有更好的解决方案,或者使用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小时,我想在邮件和短信的情况下会有这些延迟