54 votes

ISODate n'est pas défini

J'essaie d'obtenir des résultats de mongodb en utilisant nodejs/mongoose.

var dateStr = new Date(year,month,day,0,0,0);
var nextDate = new Date(year,month,day,23,59,59);

GPSData.find({"createdAt" : { $gte : new ISODate(dateStr), $lte:  new ISODate(nextDate) }}, function(err, data) {
  if(err)
    console.log(err); 
});

Erreur : ISODate is not defined

84voto

qiao Points 7444

Il convient de noter que ISODate fait partie de MongoDB et n'est pas disponible dans votre cas. Vous devez utiliser Date et les pilotes MongoDB (par exemple l'ORM Mongoose que vous utilisez actuellement) s'occuperont de la conversion de type entre Date y ISODate dans les coulisses.

11 votes

Mais ce n'est pas le cas. Il crée une chaîne de caractères.

2 votes

La réponse est correcte. Réponse plus détaillée contenant un exemple : stackoverflow.com/a/21286896/275183

0 votes

MongoDB analysera et stockera votre instance de date comme ISODate("ISOstring"). Mais lorsque vous appellerez à nouveau cette date, elle sera retournée en tant que Date Instance, je ne voulais pas le croire avant de l'avoir testé moi-même.

17voto

manatico Points 16

Dans mon cas, j'ai converti une requête avec ISODates

let dateString = "2014-01-22T14:56:59.301Z";

$gte : ISODate( dateString )

dans node.js est

$gte : new Date( dateString )

1 votes

C'est la bonne réponse ! je l'ai testé et ça marche comme sur des roulettes

4voto

farrukh malik Points 1

Convertir une date au format MongoDB ISODate en JavaScript à l'aide de Moment JS

MongoDB utilise ISODate comme type de date principal. Si vous souhaitez insérer un objet date dans une collection MongoDB, vous pouvez utiliser la méthode Date() méthode des coquilles.

Vous pouvez spécifier une date particulière en passant une chaîne de date ISO-8601 avec une année comprise entre 0 et 9999 à la fonction nouvelle Date() ou la fonction ISODate(). Ces fonctions acceptent les formats suivants :

  • nouvelle Date( "<YYYY-mm-dd>" ) renvoie l'ISODate avec la date spécifiée.
  • nouvelle Date( "<YYYY-mm-ddTHH:MM:ss>" ) spécifie la date dans le fuseau horaire local du client et renvoie l'ISODate avec la date spécifiée en UTC.
  • nouvelle Date( "<YYYY-mm-ddTHH:MM:ssZ>" ) spécifie la date en UTC et renvoie l'ISODate avec la date spécifiée en UTC.
  • new Date() spécifie la date en millisecondes depuis l'époque Unix (1er janvier 1970) et renvoie l'instance ISODate résultante.

Si vous écrivez du code en JavaScript et que vous voulez passer un objet date JavaScript et l'utiliser avec le client MongoDB, la première chose à faire est de convertir la date JavaScript au format de date MongoDB (ISODate). Voici comment procéder.

    var today = moment(new Date()).format('YYYY-MM-DD[T00:00:00.000Z]');
    console.log("Next day -- " + (reqDate.getDate() + 1))
    var d = new Date();
    d.setDate(reqDate.getDate() + 1);
    var tomorrow = moment(d).format('YYYY-MM-DD[T00:00:00.000Z]');

Vous pouvez transmettre les objets today et tomorrow aux requêtes MongoDB avec la nouvelle méthode shell Date().

  MongoClient.connect(con, function (err, db) {
    if (err) throw err
    db.collection('orders').find({ "order_id": store_id, "orderDate": {     
       "$gte": new Date(today), "$lt": new Date(tomorrow)}
     }).toArray(function (err, result) {
        console.log(result);
        if (err) throw err
          res.send(result);
    })
  })

3voto

Rahul Bhat Points 1

Au lieu d'ISO, utilisez "new Date" node js s'occupera lui-même d'ISO, pas besoin d'écrire ISO, il suffit d'utiliser "new Date".

2voto

Jitendra Points 599

Vous pouvez simplement utiliser ce qui suit pour convertir les dates en chaînes ISO :

GPSData.find({"createdAt" : { $gte : new Date(year,month,day,0,0,0).toISOString(), $lte:  new Date(year,month,day,23,59,59).toISOString() }}, function(err, data) {
  if(err)
    console.log(err); 
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X