2013-08-07 69 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