2016-05-25 16 views
0

Ich habe Dokumente mit einer Array-Eigenschaft timestamps wie in dem Dokument unten zu sehen. Ich möchte alle Dokumente mit Zeitstempeln zwischen zwei Daten finden. Meine Suchabfrage sieht wie folgt aus:Mongo finden Zeitstempel in einem Array, zwischen zwei Daten

$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')) 
        ) 
       ) 
      ) 
    ); 

Aber es gibt die erwarteten Dokumente nicht zurück. Ich habe versucht, nach StackOverflow zu suchen und nach Google zu suchen, aber ich kann nichts finden, was die Suche nach Zeitstempeln in einem Array zwischen zwei Daten erklärt.

EDIT:

Es scheint, das Problem mit PHP liegt, weil die gleiche Python Abfrage funktioniert:

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) 
      } 
     } 
    }) 

Jede Hilfe würde geschätzt.

{ 
    "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 
} 

hatte ich einen Blick auf find in array between dates in mongo und Get data between two dates mongo.

Antwort

0

Es war ein Zeitzonenproblem. Ich habe eine DateTime erstellt und die Zeitzone auf Etc/GMT gesetzt und die erwarteten Daten korrekt zurückgegeben.

$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'))); 
Verwandte Themen