MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

La requête de date avec ISODate dans mongodb ne semble pas fonctionner

Bien que $date fait partie de MongoDB Extended JSON et c'est ce que vous obtenez par défaut avec mongoexport Je ne pense pas que vous puissiez vraiment l'utiliser dans le cadre de la requête.

Si essayez une recherche exacte avec $date comme ci-dessous :

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

vous obtiendrez une erreur :

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

Essayez ceci :

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

ou (suite aux commentaires de @user3805045) :

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

ISODate peut également être amené à comparer les dates sans l'heure (noté par @MattMolnar).

Selon les types de données dans le shell mongo, les deux doivent être équivalents :

Le shell mongo fournit différentes méthodes pour renvoyer la date, soit sous forme de chaîne, soit sous forme d'objet Date :

  • Méthode Date() qui renvoie la date actuelle sous forme de chaîne.
  • nouveau constructeur Date() qui renvoie un objet Date en utilisant le wrapper ISODate().
  • Constructeur ISODate() qui renvoie un objet Date en utilisant le wrapper ISODate().

et en utilisant ISODate doit toujours renvoyer un objet Date.

{"$date": "ISO-8601 string"} peut être utilisé lorsqu'une représentation JSON stricte est requise. Un exemple possible est le connecteur Hadoop.