MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

A consulta de data com ISODate no mongodb parece não funcionar


Embora $date faz parte do MongoDB Extended JSON e é isso que você obtém como padrão com mongoexport Eu não acho que você pode realmente usá-lo como parte da consulta.

Se tentar a pesquisa exata com $date como abaixo:
db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})

você receberá erro:
error: { "$err" : "invalid operator: $date", "code" : 10068 }

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

ou (seguindo comentários de @user3805045):
db.mycollection.find({
    "dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})

ISODate também pode ser necessário comparar datas sem hora (observado por @MattMolnar).

De acordo com os tipos de dados no Mongo Shell, ambos devem ser equivalentes:

O shell mongo fornece vários métodos para retornar a data, seja como uma string ou como um objeto Date:
  • Date() método que retorna a data atual como uma string.
  • novo construtor Date() que retorna um objeto Date usando o wrapper ISODate().
  • Construtor ISODate() que retorna um objeto Date usando o wrapper ISODate().

e usando ISODate ainda deve retornar um objeto Date.

{"$date": "ISO-8601 string"} pode ser usado quando a representação JSON estrita é necessária. Um exemplo possível é o conector Hadoop.