2013-05-25 10 views
9

Scenariusz: Rozważmy Mam kolekcję o nazwie MyCollection, z następującymi danymi:Jak zapytać o zakres dat w kolekcji MongoDB, w której data ISO jest przechowywana w polu tekstowym?

{ 
    "_id" : 'MyUniqueID_01' 
    "CreatedTime" : "2013-12-01T14:35:00Z", 
    "LastModifiedTime" : "2013-12-01T13:25:00Z" 
} 

Teraz chcę kwerendy bazy danych MongoDB, gdzie wyżej rodzaju dane są w ogromnej liczby dokumentów. A moja kwerenda jest na podstawie zakresu dat czyli używając $gt, $gte, $lt & $lte

Więc moje zapytanie może być coś takiego:

db.MyCollection.find({ 'CreatedTime': {$gt: '2013-05-25T09:29:40.572Z'}}) 

Biorąc pod uwagę powyższe przykłady oczekiwany wynik jest kwerenda musi uzyskać dokument (ponieważ "CreatedTime": "2013-12-01T14: 35: 00Z" jest większy niż wartość przekazana w zapytaniu "2013-05-25T09: 29: 40.572Z"); podczas gdy nie, problem polega na tym, że pole CreatedTime ma format łańcuchowy.

Pytanie: Czy jest jakiś sposób, aby uzyskać doskonały wynik bez zmiany typu pola?

+1

Łańcuchy daty i godziny w ISO 8601, takie jak te, powinny działać poprawnie w przypadku zapytań dotyczących zakresu dat. To jedna z zalet tego formatu. Twoje przykładowe zapytanie zwróci Twój przykładowy dokument zgodnie z oczekiwaniami. – JohnnyHK

+0

@JohnnyHK: Dzięki ... Dokładnie działa na moim lokalnym DB, ale ta sama kwerenda nie działa oczekiwanie na serwerze na żywo .. Czy są jakieś zależności wersji? –

+0

@AmolMKulkarni Z ciekawości dowiedziałeś się, dlaczego nie działa na serwerze? Pracuję nad zapytaniami między zakresami czasu i natknąłem się na to podczas wyszukiwania. – Raghuveer

Odpowiedz

9

Możesz tworzyć zapytania dokładnie tak, jak w przykładzie.

Kolejność łańcuchów jest spójna i zapewnia dokładną zależność.

+3

Tak, ale dodałbym również, że ciąg zapytania musi używać tego samego sufiksu strefy czasowej co zestaw danych (co także dodaje kolejne ograniczenie w przechowywaniu ciągów danych), ponieważ dokonuje się porównania łańcuchów, na przykład przykład OP znajduje się w formularzu UTC ISO 8601 (z sufiksem "Z"), dlatego ciąg kwerendy również musi być w tej formie. –