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?
Ł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
@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? –
@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