Czy można zapytać o konkretną datę?
W książce kucharskiej mongo znalazłem, że możemy to zrobić dla zapytania o zakres dat w następujący sposób :
db.posts.find({"created_on": {"$gte": start, "$lt": end}})
Ale czy jest to możliwe na konkretną datę? To nie działa:
db.posts.find({"created_on": new Date(2012, 7, 14) })
... 5+ lat później zdecydowanie sugeruję użycie zamiast tego date-fns
Dla tych z nas, którzy używają Moment.js.
Ważne: wszystkie momenty są zmienne !
tomorrow = today.add(1, 'days')
nie działa, ponieważ również mutujetoday
. Wywołaniemoment(today)
rozwiązuje ten problem przez niejawne klonowanietoday
.źródło
.startOf('day')
zamiast .hours (0) .minutes (0) .seconds (0). Tak więc pierwsza liniavar today = moment().startOf('day')
moment(today)
do klonowania obiektu, innym rozwiązaniem jest:var tomorrow = today.clone().add(1, 'days')
$lt
:moment(today).endOf('day')
. Aby zapobiec uwzględnieniu rzeczywistych wyników z następnego dnia.moment(today).endOf('day')
daje ten sam dzień z czasów:23:59:59.999
. W rzeczywistości wygląda to bardziej poprawnie w użyciu$lte
, w przeciwnym razie obiekty w tym konkretnym czasie zostaną zignorowane.Tak, obiekt Date uzupełnia datę i godzinę, więc porównywanie go tylko z wartością daty nie działa.
Możesz po prostu użyć operatora $ where , aby wyrazić bardziej złożony warunek za pomocą wyrażenia logicznego JavaScript :)
created_on
jest polem2012-07-14
daty i godziny i jest określoną datą.Data powinna być dokładnie w formacie RRRR-MM-DD .
Uwaga: używaj
$where
oszczędnie, ma to wpływ na wydajność.źródło
Czy próbowałeś:
Problem, z którym się spotkasz, polega na tym, że daty są przechowywane jako znaczniki czasu w Mongo. Tak więc, aby dopasować datę, chcesz, aby pasowała do znacznika czasu. W twoim przypadku myślę, że próbujesz dopasować dzień (tj. Od 00:00 do 23:59 w określonym dniu). Jeśli twoje daty są przechowywane bez czasu, powinieneś być w porządku. W przeciwnym razie spróbuj określić datę jako zakres czasu tego samego dnia (np. Start = 00: 00, koniec = 23: 59), jeśli gte nie działa.
podobne pytanie
źródło
$gte
zamiast tegogte
, byłoby lepiej.Możesz zastosować następujące podejście do metody API, aby uzyskać wyniki z określonego dnia:
źródło
Mieliśmy problem ze zduplikowanymi danymi w naszej bazie danych, z polem daty zawierającym wiele wartości, w których mieliśmy mieć 1. Pomyślałem, że dodam sposób, w jaki rozwiązaliśmy ten problem w celach informacyjnych.
Mamy zbiór o nazwie „dane” z polem numerycznym „wartość” i polem „data”. Mieliśmy proces, który uważaliśmy za idempotentny, ale ostatecznie dodaliśmy 2 x wartości dziennie przy drugim uruchomieniu:
Potrzebujemy tylko 1 z 2 rekordów, więc musieliśmy skorzystać z javascript, aby wyczyścić bazę danych. Nasze początkowe podejście polegało na iteracji wyników i usunięciu dowolnego pola z czasem między 6 rano a 11 rano (wszystkie duplikaty były rano), ale podczas wdrażania wprowadzono zmianę. Oto skrypt użyty do rozwiązania tego problemu:
a następnie uruchomiłem go z
mongo thedatabase fixer_script.js
źródło