我的目标是从存储日期中减去当前日期,并将其与用户保存的间隔值进行比较。
尝试使用redact时遇到以下错误。
MongoResultException:localhost:27017:此对象已经是一个运算符表达式,不能用作文档表达式(在'0')
我的代码如下所示:
<?php
$ops = array(
array(
'$redact' => array(
'$cond' => array(
'if' => array(
'$gte' => array('$subtract' => array('$new Date()' , '$last_interacted_date'), '$reminder_interval')
),
'then' => '$$KEEP',
'else' => '$$PRUNE'
)
)
)
);
$results = $collection ->aggregate($ops);
由于某种原因,$ subtract导致此错误。为什么减法的存在导致:“这个对象已经是一个运算表达式了?”
答案 0 :(得分:2)
$new Date()
在此无效。您希望MongoDate
或MongoDB\BSON\UTCDateTime
适合您的驱动程序。
$ops = array(
array(
'$redact' => array(
'$cond' => array(
'if' => array(
'$gte' => array(
'$subtract' => array(
new UTCDateTime(round(microtime(true) * 1000)),
'$last_interacted_date'
),
'$reminder_interval'
)
),
'then' => '$$KEEP',
'else' => '$$PRUNE'
)
)
)
);
$results = $collection ->aggregate($ops);
Date
值的插值实际上发生在&#34;客户端&#34; &#34;之前&#34;聚合管道实际上是发送到服务器的。所以你得到了&#34;毫秒&#34;截至&#34;现在&#34;并发送为&#34; BSON日期&#34;。
请注意,这是&#34;毫秒&#34;与两个BSON日期不同,所以你的&#34;间隔&#34;需要以毫秒为单位,或以其他方式进行数学运算以进一步转换。