2013-08-07 70 views
0

如何检查MongoDB中的当前时间戳?MongoDB时间戳现在

目前我使用的查询,看起来像:

"last_visit": { 
    "$lt": NumberLong(1373779876) 
    } 

我存储查询,然后我有一个cron作业,使得它每分钟运行一次。

如果我的一个用户自某时间戳以来没有登录,我可以知道它。

但NumberLong产生的是不正确的,因为我目前使用的时间() - 通过PHP14天,所产生的NumberLong应该是类似的结果:

timestampNOW - someTimestamp(我在PHP中生成)

我目前的解决方案保留过去的绝对日期,而不是像timeRIGHTNOW这样的相对日期 - 14天。

我相信我需要我的查询中的本地蒙戈命令

回答

0

我不完全知道你是问什么,但我觉得有两种选择:

a)您要使用PHP询问的MongoDB对于尚未在过去两周内登录的所有用户构造查询

<?php 
// two weeks ago. note that time() returns number of seconds, not milliseconds 
$date = (time() - (14 * 24 * 60 * 60)) * 1000; 
// construct query: { "last_visit" : { $lt : $date } } 
$query = array('last_visit' => array('$lt' => $date)); 
$cursor = $collection->find($query); 
// you can now iterate $cursor 
?> 

b)你想在JavaScript执行MongoDB的查询(“天然蒙戈命令”)

db.Foo.find({"last_visit" : {$lt : ISODate().getTime()}}); 

主叫ISODate将创建表示当前时间的新ISODate对象,getTime将返回从unix新纪元的毫秒数。我不知道如何将该查询传递给PHP mongodb驱动程序,但它应该很简单。

+0

而不是'(时间() - (14 * 24 * 60 * 60))* 1000''您应该使用''(strtotime(“两周前”)* 1000)''。不是每天都是“24 * 60 * 60”分钟! – Derick

+0

此外,您无法通过驱动程序传递ISODate()。getTime()。纯PHP中的解决方案就是我所要做的。 – Derick

+0

在UTC中,一天的时间长短不变,在许多情况下都是人们所期望的:用户在过去的336小时内没有登录(除闰秒外)。在大多数情况下,我不想在这里考虑DST。通过驱动程序传递JS查询应该是可能的,但可能需要'command'或'execute',某事。像http://php.net/manual/en/mongodb.execute.php – mnemosyn