查找状态为的邮件,并将计划日期与现在进行比较(MONGO/PHP)

查找状态为的邮件,并将计划日期与现在进行比较(MONGO/PHP),php,mongodb,Php,Mongodb,我发邮件有点小问题。我想发送许多来自我的数据库的邮件,但有两个条件: 状态为“待发送”的邮件 按预定日期发送邮件 这两个条件在查找请求中的运行方式如下: $mails = $database->mails->find(['status' => 'TO_SEND', ['date_scheduled' => ['$gte' => new MongoDB\BSON\UTCDateTime()]]]); “查找状态为“良好”的邮件,但当我添加计划条件时,会显示以下消

我发邮件有点小问题。我想发送许多来自我的数据库的邮件,但有两个条件:

  • 状态为“待发送”的邮件
  • 按预定日期发送邮件
这两个条件在查找请求中的运行方式如下:

$mails = $database->mails->find(['status' => 'TO_SEND', ['date_scheduled' => ['$gte' => new MongoDB\BSON\UTCDateTime()]]]);
“查找状态为“良好”的邮件,但当我添加计划条件时,会显示以下消息:

致命错误:Uncaught MongoDB\Driver\Exception\InvalidArgumentException:MongoDB\BSON\UTCDateTime::_construct()正好需要1个参数,0在/Users/Developpeur/cron/cron_mail.php:22中给出 堆栈跟踪:

0/Users/Developpeur/cron/cron_-mail.php(22):MongoDB\BSON\UTCDateTime->\uu-construct() 1{main} 在第22行的/Users/Developpeur/cron/cron_mail.php中抛出

您能帮助我吗?

UTCDateTime()构造函数需要一个参数(从epoch开始的毫秒数)。我不是PHP专家,但您应该能够传递
time()*1000
作为参数,为当前日期/时间创建MongoDB UTCDateTime。您的请求如下所示:

$mails = $database->mails->find(['status' => 'TO_SEND', ['date_scheduled' => ['$gte' => new MongoDB\BSON\UTCDateTime(time() * 1000)]]]);
UTCDateTime()构造函数需要一个参数(自epoch以来的毫秒数)。我不是PHP专家,但您应该能够传递
time()*1000
作为参数,为当前日期/时间创建MongoDB UTCDateTime。您的请求如下所示:

$mails = $database->mails->find(['status' => 'TO_SEND', ['date_scheduled' => ['$gte' => new MongoDB\BSON\UTCDateTime(time() * 1000)]]]);

萨克的杰罗德,我的错误消失了!但是我的邮件没有被发送^^我很高兴您能够通过datetime条件的错误!您发送电子邮件的问题是一个单独的问题,可能值得问一个关于堆栈溢出的新问题。为什么您认为MongoDB不能比较两个日期?我的查询尝试将新的MongoDB\BSON\UTCDateTime(time()*1000)与我的收藏中存储的isoDate进行比较:“date_scheduled”:isoDate(“2016-07-10T11:18:57.000+0000”)“从数据库返回的邮件是否正确?这意味着那些状态为“to_SEND”且日期时间大于当前时间的邮件邮件(表示将来要发送的消息).Thak的Jerod,我的错误消失了!但是我的邮件没有发送…^^^我很高兴您能够从datetime条件中克服错误!您发送电子邮件的问题是一个单独的问题,可能值得提出一个关于堆栈溢出的新问题。为什么您认为MongoDB不能比较两个日期?我的查询尝试比较一个新的MongoDB\BSON\UTCDateTime(time()*1000)在我的收藏中存储了一个isoDate:“date_scheduled”:isoDate(“2016-07-10T11:18:57.000+0000”)是从数据库返回的正确邮件吗?指那些状态为“TO_SEND”且日期时间大于当前时间的邮件(表示将来要发送的邮件)。