Chociaż $date
jest częścią MongoDB Extended JSON i właśnie to otrzymujesz domyślnie dzięki mongoexport
Nie sądzę, że naprawdę można go użyć jako części zapytania.
Jeśli spróbuj wyszukiwania dokładnego z $date
jak poniżej:
db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})
otrzymasz błąd:
error: { "$err" : "invalid operator: $date", "code" : 10068 }
Spróbuj tego:
db.mycollection.find({
"dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
})
lub (po komentarzach @user3805045):
db.mycollection.find({
"dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})
ISODate
może być również wymagane porównanie dat bez godziny (zauważone przez @MattMolnar).
Zgodnie z typami danych w powłoce mongo oba powinny być równoważne:
Powłoka mongo udostępnia różne metody zwracania daty, jako ciąg znaków lub jako obiekt Date:
- Metoda Date(), która zwraca bieżącą datę jako ciąg znaków.
- nowy konstruktor Date(), który zwraca obiekt Date przy użyciu opakowania ISODate().
- Konstruktor ISODate(), który zwraca obiekt Date przy użyciu opakowania ISODate().
i używając ISODate
powinien nadal zwracać obiekt Date.
{"$date": "ISO-8601 string"}
może być używany, gdy wymagana jest ścisła reprezentacja JSON. Jednym z możliwych przykładów jest złącze Hadoop.