如何检查MongoDB中的当前时间戳?
目前我使用的查询类似于:
"last_visit": {
"$lt": NumberLong(1373779876)
}
我存储了该查询,然后我有一个cron作业,让它每分钟运行一次。
如果我的某个用户从某个时间戳开始没有登录,我就可以知道了。
但NumberLong生成的不正确,因为我目前正在使用time() - 14天通过PHP,结果NumberLong应该是以下结果:
timestampNOW - someTimestamp(我在PHP中生成)
我目前的解决方案是过去的绝对日期,而不是相对日期,例如timeRIGHTNOW - 14天。
我相信我的查询中需要一个本地Mongo命令...
答案 0 :(得分:1)
我不完全确定你要求的是什么,但我认为有两种选择:
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查询 ('native Mongo command')
db.Foo.find({"last_visit" : {$lt : ISODate().getTime()}});
调用ISODate
将创建一个表示当前时间的新ISODate
对象,getTime
将返回自UNIX纪元以来的毫秒数。我不知道如何将该查询传递给PHP mongodb驱动程序,但它应该很简单。
答案 1 :(得分:1)
当前时间戳舍入到整秒:
Timestamp(new Date().getTime()/1000,0)
时间戳14天前:
Timestamp((new Date().getTime()-(3600*24*14*1000))/1000,0)