2011-09-24 30 views
6

Tôi muốn truy vấn bộ sưu tập và nhận tài liệu đã tạo chưa đầy 3 giờ trước.Làm thế nào để truy vấn theo thời gian trong MongoDB với PHP?

$realtime = date("Y-m-d H:i:s"); 
$mongotime = New Mongodate(strtotime($realtime)); 

$mongotime = $mongotime - 3 hours; //PSEUDOCODE 
$some_condition = array('time' => array('$lt'=>$mongotime)); 

$result = $db->collection->find($some_condition); 

Có một cách hiệu quả để đưa

$ some_condition

phần mà không sử dụng NẾU tuyên bố trong PHP?

+0

Tôi không thấy bất kỳ câu lệnh if nào trong mã của bạn ... thực sự là mã của bạn trông như thế nào? – dcrosta

+1

Tôi nghĩ rằng bạn cũng có thứ tự tình trạng của bạn sai. '$ lt' đọc từ trái sang phải, vì vậy bạn muốn tương đương với PHP của' {time: {$ lt: mongotime}} ', sẽ là' mảng ('time' => array ('$ lt' => $ mongotime)) ' – dcrosta

+0

@drcosta không, đây chỉ là mã giả mà tôi đang cố gắng thực hiện. Thay vì sử dụng Find(), lấy giá trị từ kết quả truy vấn và xác định điều kiện theo giá trị đó, tôi muốn nhận kết quả đủ điều kiện ngay lập tức mà không sử dụng bất kỳ câu lệnh If nào trong PHP. – InspiredJW

Trả lời

9

Tôi đã tìm thấy giải pháp.

$diff = 60 * 60 * 3; //3 hours in seconds 

$mongotime = New Mongodate(time()-$diff); 

$condition = array('time' => array('$lt'=>$mongotime)); 

$result = $db->collection->find($condition); 
+4

Việc tính toán '$ realtime' là lãng phí, bạn chỉ có thể làm' $ mongotime = new MongoDate (time() - $ diff); ' – salathe

+0

Với phiên bản php mới nhất, lớp Mongodate không được chấp nhận. bạn có thể cho ví dụ với phiên bản php mới nhất không –

1

Lần đầu tiên nhận được thời gian ba giờ trước. Sau đó truy vấn lớn hơn thời điểm đó:

define('SECONDS_PER_HOUR', 3600); 

$mongotime = New Mongodate(time()-3*SECONDS_PER_HOUR); 

$condition = array('time' => array('$lt'=>$mongotime)); 

$result = $db->collection->find($condition); 

Không cần phải thực hiện một số dấu thời gian -> chuỗi -> chuyển đổi dấu thời gian (như bạn đề nghị nó) và bạn nên đặt tên cho các hằng số bạn sử dụng vì vậy nó rõ ràng những gì mà họ đại diện.

Các vấn đề liên quan