Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Date Mongoose$gt,日期返回$gte结果_Date_Datetime_Mongoose - Fatal编程技术网

Date Mongoose$gt,日期返回$gte结果

Date Mongoose$gt,日期返回$gte结果,date,datetime,mongoose,Date,Datetime,Mongoose,我有一些代码试图在指定时间后获取Post类型的所有文档 员额的定义如下:{ 更新:日期 } 当我运行以下命令时: Post.find({更新:{$gt:specifiedDate}}) 如果specifiedDate是一个值小于new Date()的日期对象,它将返回更新为specifiedDate的Post文档,而不是在specifiedDate之后更新的所有Post文档 因此,它似乎返回$gte查询的结果,而不是$gt 还有其他人注意到这一点吗 提前谢谢 编辑: 如果这有助于澄清情况,则对日

我有一些代码试图在指定时间后获取Post类型的所有文档

员额的定义如下:{ 更新:日期 }

当我运行以下命令时:

Post.find({更新:{$gt:specifiedDate}})

如果specifiedDate是一个值小于new Date()的日期对象,它将返回更新为specifiedDate的Post文档,而不是在specifiedDate之后更新的所有Post文档

因此,它似乎返回$gte查询的结果,而不是$gt

还有其他人注意到这一点吗

提前谢谢

编辑:

如果这有助于澄清情况,则对日期对象进行编码,并将其作为时间戳作为参数发送到请求中。我正在尝试获取所有“新”的帖子,这意味着所有帖子都在最后一篇可见帖子的日期之后。此日期对象是设置为req.params.timestamp的时间戳。有一个Post文档的日期与作为req.params.timestamp传递的日期相同。在此之后的所有帖子都应该被返回,但是,这篇帖子一直显示,好像我在调用$gte而不是$gt

问题是:

Post.find({$or : [{_recipient : user.id}, {_sender : user.id, mode : POST_MODE.POST}], updated : { $gt : new Date (decodeURIComponent(req.params.timestamp)) }})
.sort({updated : -1})
当我检查控制台的

new Date (decodeURIComponent(req.params.timestamp)) 
。。。它被格式化为毫秒,如下所示

Wed Apr 23 2014 15:03:52 GMT-0400 (EDT)

所以我猜你是在几天内思考,而没有意识到如果
specifiedDate
在一天开始的时候是午夜,那么就mongodb而言,当天任何时候更新的所有帖子都被视为“大于”。也许您需要在查询中使用
specifiedDate
之后的当天午夜,并将运算符更改为
$gte
?请记住,JavaScript中的日期精度低至毫秒,因此,要使两个日期相等,它们必须出现在完全相同的毫秒上,这使我得出我的理论,即您的思维是以天为单位,而不是以毫秒为单位。

我遇到了一个似乎相同的问题。虽然我不确定这是否是同一个问题,但我还是发布了这篇文章,因为我只是在上面花了很多时间,它可能会帮助其他人

在我的例子中,单元测试失败,因为它返回了文档,尽管在date属性上使用了
$gt
,并将用于保存文档的相同日期对象放在查询中

当我刚刚将日期放入与Chai一起发送的查询中时,它失败了,并且还使用了
moment.utc

至少在
moment.utc
中,它似乎被截断为秒,因为我必须为它添加一秒钟才能使用
$gt
。添加更少的时间(例如100毫秒)不起作用


但是在Date对象上使用方法
toISOString()
,并将结果传递给查询,正如预期的那样使用
$gt

谢谢Peter。我应该在几毫秒内澄清我的想法。我检查了updated中存储的date对象的两个值,以及查询中发送的date对象的两个值,这两个值在瞬间都是完全相同的。我在我的收藏中有一篇带有更新值的帖子,当我使用$gt时,它会被返回。这就是为什么我得出结论,事情搞砸了,因为它的行为就像$gte。我希望不是这样:/Second guess:utc vs local time zone?我将尝试将两者转换为utcI,并在specifiedDate参数中添加1毫秒,结果成功(仅在specifiedDate之后返回帖子),其中比较运算符为$gt(而非$gte)。我认为这可能是一个错误。然而,似乎没有其他人遇到过这种情况。有人吗?我刚刚更新了安装mongoose 3.8.8的软件包(以前是3.8.1版本),问题仍然存在。好吧,现在我要用我的变通方法。