MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

La query sulla data con ISODate in mongodb non sembra funzionare

Sebbene $date fa parte di MongoDB Extended JSON ed è ciò che ottieni di default con mongoexport Non penso che tu possa davvero usarlo come parte della query.

Se prova la ricerca esatta con $date come di seguito:

db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})

riceverai un errore:

error: { "$err" : "invalid operator: $date", "code" : 10068 }

Prova questo:

db.mycollection.find({
    "dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
})

oppure (in seguito ai commenti di @user3805045):

db.mycollection.find({
    "dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})

ISODate potrebbe anche essere richiesto di confrontare le date senza tempo (annotato da @MattMolnar).

Secondo i tipi di dati nella mongo Shell, entrambi dovrebbero essere equivalenti:

La shell mongo fornisce vari metodi per restituire la data, sia come stringa che come oggetto Date:

  • Metodo Date() che restituisce la data corrente come stringa.
  • nuovo costruttore Date() che restituisce un oggetto Date usando il wrapper ISODate().
  • Costruttore ISODate() che restituisce un oggetto Date utilizzando il wrapper ISODate().

e utilizzando ISODate dovrebbe comunque restituire un oggetto Date.

{"$date": "ISO-8601 string"} può essere utilizzato quando è richiesta una rappresentazione JSON rigorosa. Un possibile esempio è il connettore Hadoop.