2017-05-11 108 views
0

首先,很抱歉,如果我的問題很明顯,但我有一些麻煩,用mongodb做特定的查詢。兩次用mongodb查詢

假設我有以下文件的集合:

+----+--------+---------------------+ 
| ID | user |  record_date  | 
+----+--------+---------------------+ 
| 1 | Frank | 2017-05-10 12:13:15 | 
| 2 | Ian | 2017-05-10 13:15:18 | 
| 3 | Ian | 2017-05-10 17:45:34 | 
| 4 | Lip | 2017-05-10 18:53:12 | 
| 5 | Frank | 2017-05-10 18:54:23 | 
| 6 | Fiona | 2017-05-10 20:12:48 | 
| 7 | Debbie | 2017-05-11 05:05:12 | 
| 8 | Ian | 2017-05-11 08:17:38 | 
| 9 | Debbie | 2017-05-11 08:30:57 | 
| 10 | Carl | 2017-05-11 14:17:18 | 
+----+--------+---------------------+ 

我試圖讓有時間間隔,而不是一個日期間隔之間的record_date任何文件:例如,所有文件在那裏record_date時間爲17:00至19:00。使用postgres或mysql,這很容易:我將日期值轉換爲一個數字(ex爲第一個文檔:1213)和一個簡單的查詢,如record_date BETWEEN(1700,1900),但我有麻煩與mongo獲得相同的結果。

有沒有人有想法做這樣的要求?

非常感謝!

吉姆

+0

找你使用的服務器端技術? –

+0

服務器是debian 8.2,mongodb 2.4.10。該應用程序使用Laravel(php) – jimouest2005

+0

你試過答案? –

回答

0
db.times.aggregate([{"$project": {time : {"$dateToString": {format : "%H", 
date : "$record_date"}}}}, {"$match" : {time: {"$gte":"17","$lte":"19"}}}]) 

這種聚合管道拿出一部分時間(具體使用格式「%H」小時部分)在項目中使用階段$ dateToString聚集操作,然後使用匹配的相位進行篩選結果。 參考 - $dateToString

如果您需要了解更多關於聚合管道如何工作 - Aggregation Pipeline