MongoDB:按日期查询

时间:2010-10-31 12:26:29

标签: php mongodb

在MongoDB数据库中,我有一组项目,每个项目都存储其创建日期。我需要按日期查询此集合。我试过了:

  

db.items.findOne({date:{new Date(1285947037*1000)}})

但它没有返回任何东西。我使用PHP($date->sec得到了时间戳,其中$date是数据库中的MongoDate对象。那么这样做的正确方法是什么?感谢。

2 个答案:

答案 0 :(得分:6)

Date构造函数需要毫秒的时间戳。 1285947037时间戳位于,这就是您将其乘以1000的原因。

我的猜测是文档中的实际时间戳包含毫秒,例如1285947037461(注意最后的461)。您将秒数乘以1000,结果为1285947037000。如您所见,这些时间戳不相等:

1285947037461 // actual timestamp in MongoDB
1285947037000 // value you calculated

问题在于MongoDate类:它会丢失毫秒精度,因为您可以在documentation中阅读。这是引用:

  

[...]这意味着当文档发送到数据库或从数据库发送时,任何超过毫秒的精度都将丢失。

要使用时间戳(以秒为单位)查找您要查找的文档,您需要以下内容:

db.foo.findOne(function () {
  // round the stored date to seconds and compare to timestamp
  return parseInt(this.date / 1000) === 1285947037
})

您可以使用myDateObject.getTime()在控制台中获取确切的时间戳(以毫秒为单位)。

答案 1 :(得分:-1)

您的查询中有一个小错误;删除new Date(...)周围的大括号,你就可以了:

db.items.findOne({date: new Date(1285947037*1000)})