2017-05-11 5 views
0

まず、私の質問が明らかな場合は申し訳ありませんが、mongodbで特定のクエリを実行する際にいくつか問題があります。mongodbとの2回のクエリ

のは、私は次のドキュメントでコレクションを持っていると仮定しましょう:

+----+--------+---------------------+ 
| 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の場合、日付の値を数値(最初の文書の場合は1213)に変換し、record_date BETWEEN(1700,1900)のような単純なクエリに変換しましたが、 mongoで同じ結果を得ている。

誰でもこのようなリクエストを行う考えがありますか?

ありがとうございます!

ジム

+0

- $dateToString

あなたはどのように集約パイプラインの作品についての詳細を知る必要がある場合は? –

+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"}}}]) 

この集約パイプラインは、プロジェクト・フェーズの$ dateToString集約演算子を使用して、時間の一部(形式の「%H」を使用して、具体的に時間の部分)を取り出して、フィルタにマッチ相を使用結果。 参考 - Aggregation Pipelineサーバーサイドの技術をyou'rを使用して