ISODate未定义

时间:2012-01-13 09:24:55

标签: node.js mongoose

我正在尝试使用nodejs / mongoose从mongodb获取结果。

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); 
});

错误:ISODate is not defined

6 个答案:

答案 0 :(得分:44)

请注意ISODate是MongoDB的一部分,在您的情况下不可用。您应该使用Date而MongoDB驱动程序(例如您当前使用的Mongoose ORM)将负责场景后面DateISODate之间的类型转换。

答案 1 :(得分:1)

您可以简单地按如下方式使用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); 
});

答案 2 :(得分:0)

就我而言,我正在使用ISODates转换查询

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

$gte : ISODate(dateStr)

在node.js中是

$gte : new Date(dateStr)

答案 3 :(得分:0)

代替ISO使用“新日期”节点js会处理ISO本身,无需编写ISO,只需使用“新日期”即可

答案 4 :(得分:0)

使用Moment JS在JavaScript中将日期转换为MongoDB ISODate格式

MongoDB使用ISODate作为其主要日期类型。如果要将日期对象插入MongoDB集合中,则可以使用 Date() Shell方法。

您可以通过将ISO-8601日期字符串(其年份在0到9999之间的范围内)传递给 new Date()构造函数或ISODate()函数来指定特定日期。这些函数接受以下格式:

  • 新日期("<YYYY-mm-dd>"返回具有指定日期的ISODate。
  • 新日期("<YYYY-mm-ddTHH:MM:ss>"在客户的本地时区中指定日期时间,并以UTC返回具有指定日期时间的ISODate。
  • 新日期("<YYYY-mm-ddTHH:MM:ssZ>"以UTC指定日期时间,并以UTC返回具有指定日期时间的ISODate。
  • new Date()将日期时间指定为自Unix时代(1970年1月1日)以来的毫秒数,并返回生成的ISODate实例。

如果您正在用JavaScript编写代码,并且想要传递JavaScript日期对象并将其与MongoDB客户端一起使用,则要做的第一件事就是将JavaScript日期转换为MongoDB日期格式(ISODate)。操作方法如下。

    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]');

您可以使用新的Date()Shell方法将今天和明天的对象传递给MongoDB查询。

  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);
    })
  })

答案 5 :(得分:0)

 if (req.params.sDate && req.params.eDate) {
      query["createdAt"] = {
        $gte:  new Date("2020-01-25").toISOString(),
        $lte:    new Date("2020-09-25").toISOString()
      };
    }

    console.log("query", query, req.params.limit, req.params.skip);
    domain.Payment.find(query)
      .limit(req.params.limit)
      .skip(req.params.skip)
      .sort({ createdAt: -1 })
      .exec((err, list) => {
        console.log("err", err);

        if (err || !list) {
          callback(err, null);
        } else {