2016-05-25 28 views
0

以下のドキュメントに示すように、配列プロパティーtimestampsを持つドキュメントがあります。私は、2つの日付の間にタイムスタンプを持つすべての文書を探したい。私の検索クエリは次のようになります。Mongoは、2つの日付の間の配列内のタイムスタンプを見つける

$subset = $db->col->find(
      array( 
       'timestamps'=> array(
        '$elemMatch'=> array(
         '$gte'=> new MongoDate(strtotime('2016-05-25 13:00:00')), 
         '$lte'=> new MongoDate(strtotime('2016-05-25 14:00:00')) 
        ) 
       ) 
      ) 
    ); 

しかし、期待されるドキュメントは返されません。私はGoogleに答えてStackOverflowを検索しようとしましたが、配列内のタイムスタンプを2つの日付の間で検索する方法を見つけることができません。

EDIT:

同じPythonのクエリが動作するため、問題はPHPであるようだ:

import datetime 
f = '%Y-%m-%d %H:%M:%S' 
c = db.col.find({ 
     'timestamps': { 
      '$elemMatch': { 
       '$gte': datetime.datetime.strptime('2016-05-25 13:00:00', f), 
       '$lte': datetime.datetime.strptime('2016-05-25 14:00:00', f) 
      } 
     } 
    }) 

任意の助けをいただければ幸いです。

{ 
    "month": { 
     "$date": 1464134400000 
    }, 
    "timestamps": [ 
     { 
      "$date": 1464181803000 
     }, 
     { 
      "$date": 1464182103000 
     }, 
     { 
      "$date": 1464182403000 
     }, 
     { 
      "$date": 1464183003000 
     }, 
     { 
      "$date": 1464183603000 
     }, 
     { 
      "$date": 1464184203000 
     }, 
     { 
      "$date": 1464184803000 
     }, 
     { 
      "$date": 1464185403000 
     }, 
     { 
      "$date": 1464186003000 
     } 
    ], 
    "status_history": [ 
     1, 
     1, 
     1, 
     0, 
     1, 
     1, 
     1, 
     0, 
     1 
    ], 
    "_id": 12345 
} 

私はfind in array between dates in mongoGet data between two dates mongoを見ていました。

答えて

0

タイムゾーンの問題でした。 DateTimeを作成し、タイムゾーンをEtc/GMTに設定し、期待されるデータが正しく返されました。

$gte = new MongoDate (new DateTime('2016-05-25 13:00:00', new DateTimeZone('Etc/GMT'))); 
$lte = new MongoDate (new DateTime('2016-05-25 14:00:00', new DateTimeZone('Etc/GMT'))); 
関連する問題