MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zapytanie o datę z ISODate w mongodb nie działa

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB rejestruje wszystkie zapytania

  2. Aktualizowanie osadzonej właściwości dokumentu w Mongodb

  3. Lista kontrolna bezpieczeństwa dla wdrożeń produkcyjnych MongoDB

  4. Białe znaki MongoDB

  5. Klucze obce w mongo?