Bawiłem się, przechowując tweety wewnątrz mongodb, każdy obiekt wygląda następująco:
{
"_id" : ObjectId("4c02c58de500fe1be1000005"),
"contributors" : null,
"text" : "Hello world",
"user" : {
"following" : null,
"followers_count" : 5,
"utc_offset" : null,
"location" : "",
"profile_text_color" : "000000",
"friends_count" : 11,
"profile_link_color" : "0000ff",
"verified" : false,
"protected" : false,
"url" : null,
"contributors_enabled" : false,
"created_at" : "Sun May 30 18:47:06 +0000 2010",
"geo_enabled" : false,
"profile_sidebar_border_color" : "87bc44",
"statuses_count" : 13,
"favourites_count" : 0,
"description" : "",
"notifications" : null,
"profile_background_tile" : false,
"lang" : "en",
"id" : 149978111,
"time_zone" : null,
"profile_sidebar_fill_color" : "e0ff92"
},
"geo" : null,
"coordinates" : null,
"in_reply_to_user_id" : 149183152,
"place" : null,
"created_at" : "Sun May 30 20:07:35 +0000 2010",
"source" : "web",
"in_reply_to_status_id" : {
"floatApprox" : 15061797850
},
"truncated" : false,
"favorited" : false,
"id" : {
"floatApprox" : 15061838001
}
Jak napisać kwerendę, która sprawdza created_at i znajduje wszystkie obiekty między 18:47 a 19:00? Czy muszę aktualizować dokumenty, aby daty były przechowywane w określonym formacie?
2010-04-29T00:00:00.000Z
jest znacznie łatwiejsze niż obliczenie tej samej daty / godziny w milisekundach. Możesz również dość łatwo dokonać konwersji strefy czasowej. Ponadto Daty już obsługują takie dni przestępne, sekundy przestępne i inne osobliwości, z którymi zwykle nie chcesz sobie poradzić.Odpowiedzi:
Zapytanie o zakres dat (określony miesiąc lub dzień)wksiążce kucharskiej MongoDBma bardzo dobre wytłumaczenie na ten temat, ale poniżej jest coś, co sam wypróbowałem i wydaje się, że działa.Na podstawie moich eksperymentów będziesz musiał serializować swoje daty do formatu obsługiwanego przez MongoDB, ponieważ poniższe wyniki dały niepożądane wyniki wyszukiwania.
W drugim przykładzie nie oczekiwano żadnych rezultatów, ale wciąż był jeden. Wynika to z tego, że podstawowe porównanie ciągów zostało wykonane.
źródło
Wyjaśnić. Ważne jest, aby wiedzieć, że:
Oto działający fragment kodu, w którym dokonujemy drobnej manipulacji datą, aby zapewnić, że Mongo (tutaj używam modułu mangusty i chcę wyników dla wierszy, których atrybut daty jest krótszy niż (przed) datą podaną jako parametr myDate) to poprawnie:
źródło
MongoDB faktycznie przechowuje millis daty jako int (64), zgodnie z zaleceniami http://bsonspec.org/#/specification
Jednak pobieranie danych może być dość mylące, ponieważ sterownik klienta utworzy obiekt daty z własną lokalną strefą czasową. Sterownik JavaScript w konsoli mongo na pewno to zrobi.
Tak więc, jeśli zależy Ci na strefach czasowych, upewnij się, że wiesz, co to powinno być, kiedy je odzyskasz. Nie powinno to mieć większego znaczenia dla zapytań, ponieważ nadal będzie równe tej samej wartości int (64), niezależnie od strefy czasowej, w której znajduje się obiekt daty (mam nadzieję). Ale zdecydowanie robiłbym zapytania z rzeczywistymi obiektami daty (a nie ciągami znaków) i pozwalałbym sterownikowi robić swoje.
źródło
Python i
pymongo
Znajdowanie obiektów między dwiema datami w Pythonie ze
pymongo
zbioramiposts
(na podstawie samouczka ):Gdzie
{"$gte": from_date, "$lt": to_date}
określa zakres pod względemdatetime.datetime
typów.źródło
Zamień na
collection
nazwę kolekcji, którą chcesz wykonać zapytanieźródło
Użyj tego kodu, aby znaleźć zapis między dwiema datami korzystania
$gte
i$lt
:źródło
Korzystanie z Moment.js i operatorów zapytań porównawczych
źródło
Konwertuj daty na strefę czasową GMT, upychając je w Mongo. W ten sposób nigdy nie będzie problemu ze strefą czasową. Następnie po prostu wykonaj matematykę w polu Twitter / Strefa czasowa, gdy wyciągniesz dane z powrotem do prezentacji.
źródło
Dlaczego nie przekonwertować ciągu na liczbę całkowitą w postaci RRRRMMDDGGMMSS? Każdy przyrost czasu tworzyłby wówczas większą liczbę całkowitą i można filtrować liczby całkowite zamiast martwić się o konwersję do czasu ISO.
źródło
użyj $ gte i $ lte, aby znaleźć dane między datami w mongodb
źródło
Możesz to również sprawdzić. Jeśli używasz tej metody, użyj funkcji parsowania, aby uzyskać wartości z bazy danych Mongo:
źródło
źródło
Możesz to również sprawdzić lub spróbować zamiast używać agregacji
źródło
próbowałem w tym modelu zgodnie z moimi wymaganiami muszę zapisać datę, kiedy obiekt zostanie utworzony później Chcę pobrać wszystkie rekordy (dokumenty) między dwiema datami w moim pliku HTML Użyłem następującego formatu mm / dd / rrrr
w moim pliku py (python) przekonwertowałem go na „iso fomate” w następujący sposób
i zapisane w mojej kolekcji dbmongo z „SelectedDate” jako polem w mojej kolekcji
aby pobrać dane lub dokumenty między 2 datami użyłem następującego zapytania
źródło