Wydaje mi się, że nie jestem w stanie uzyskać nawet najbardziej podstawowego zapytania dotyczącego daty w MongoDB. Z dokumentem, który wygląda mniej więcej tak:
{
"_id" : "foobar/201310",
"ap" : "foobar",
"dt" : ISODate("2013-10-01T00:00:00.000Z"),
"tl" : 375439
}
I zapytanie, które wygląda tak:
{
"dt" : {
"$gte" : {
"$date" : "2013-10-01T00:00:00.000Z"
}
}
}
Otrzymuję 0 wyników z wykonania:
db.mycollection.find({
"dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})
Wiesz, dlaczego to nie działa?
Dla porównania, zapytanie to jest tworzone przez MongoTemplate Springa więc nie mam bezpośredniej kontroli nad zapytaniem, które ostatecznie jest wysyłane do MongoDB.
(PS)
> db.version()
2.4.7
Dzięki!
Query
obiekt wiosną. Serializowana forma zapytania niekoniecznie jest poprawnym zapytaniem, które można po prostu skopiować / wkleić do powłoki mongo, co samo w sobie jest frustrujące. Sprawcanew Date('2016-03-09')
naISODate('2016-03-09')
. Ten pierwszy zwróciłby daty w przeszłości dla$gte
zapytania.Z MongoDB Cookbook stronie komentarzy:
To zadziałało dla mnie. W pełnym kontekście następujące polecenie pobiera każdy rekord, w którym
dt
pole daty ma datę w dniu Zulu 2013-10-01 (RRRR-MM-DD):źródło
datetime.datetime
jest równoważneISODate
.Spróbuj tego:
źródło
Używam robomongo jako GUI klienta mongodb i poniższe działały dla mnie
Po stronie aplikacji używam sterownika mongodb opartego na nodejs (v1.4.3), aplikacja używa datepicker w interfejsie użytkownika, który podaje datę jak RRRR-mm-dd, następnie jest dodawany z domyślnym czasem jak 00:00:00, a następnie podawany do
new Date()
konstruktora, a następnie dostarczony do obiektu kryteriów mongodb, myślę, że sterownik konwertuje datę na datę ISO, a następnie zapytanie działa i daje pożądane dane wyjściowe, jednak takie samenew Date()
konstruktor nie działa lub wyświetla takie same dane wyjściowe w robo mongo, dla tego samego kryteria, co jest dziwne, ponieważ użyłem robomongo do sprawdzenia krzyżowego obiektów kryteriów.Podczas gdy domyślna mlioshell cli działa dobrze zarówno z, jak
ISODate
inew Date()
źródło
W trybie ścisłym Json musisz zachować kolejność:
Jedyne, co zadziałało, aby zdefiniować moje zapytania w mlab.com.
źródło
W powłoce MongoDB:
W moim węźle kod JS (za pomocą Mongoose)
Pytam moją kolekcję zdarzeń czujnika, aby zwrócić wartości, w których pole „z” jest większe niż podana data
źródło
to jest mój dokument
teraz chcę znaleźć dokument z 27 datą. więc użyłem tego ....
to zadziałało dla mnie.
źródło
To działało dla mnie podczas wyszukiwania wartości mniejszej lub równej niż teraz:
źródło
Owiń to
new Date()
:źródło
Stare pytanie, ale wciąż pierwszy hit w Google, więc zamieszczam je tutaj, aby łatwiej je znaleźć ...
Korzystanie z Mongo 4.2 i agregacji ():
Ta daje ci zmienną groupby jako datę, czasem lepiej jest traktować ją jako same komponenty.
źródło