Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose:更新文档时对值强制转换到日期失败_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose:更新文档时对值强制转换到日期失败

Javascript Mongoose:更新文档时对值强制转换到日期失败,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我在项目中使用Mongoose,在其中一个模式中使用Date字段,如下所示: reservationDay: { type: Date, default: Date.now } 我可以毫无问题地使用此字段创建文档。当I console.log创建此日期后,我得到: reservationDay: Thu Nov 20 2014 04:45:00 GMT+0100 (CET) 但是,当我尝试更新此文档时(即使不更改reservationDay字段),也会出现问

我在项目中使用Mongoose,在其中一个模式中使用Date字段,如下所示:

reservationDay: {
        type: Date,
        default: Date.now
}
我可以毫无问题地使用此字段创建文档。当I console.log创建此日期后,我得到:

reservationDay:  Thu Nov 20 2014 04:45:00 GMT+0100 (CET)
但是,当我尝试更新此文档时(即使不更改reservationDay字段),也会出现问题。以下是我收到的错误消息:

name: 'CastError',
  message: 'Cast to date failed for value "20/11/2014 04:11" at path "reservationDay"' } CastError: Cast to date failed for value "20/11/2014 04:11" at path "reservationDay"
以下是我如何在服务器端更新此文档:

Reservation.findOne({ _id: id }).exec(function(err, reservation) {
                        if (err) {
                            //handle
                        }
                        if (!reservation) {
                            //handle
                        }
                        reservation = extend(reservation, req.body);
                        reservation.save(function(err, updatedReservation) {
                            if (err) {
                                //handle
                            }
                            return res.json(reservation);
                        });
                    });
并且请求正文中的日期没有更改

你知道是什么导致了这个错误吗

谢谢

“20/11/2014 04:11”
是无效的ISODate格式。您正在将reservationDate转换为无效格式的字符串。您需要将其转换为有效的ISODate格式(日期前一个月):


为了便于操作日期格式,我建议使用Moment JS在JavaScript中将日期转换为MongoDB ISODate格式

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

通过将包含0到9999年的ISO-8601日期字符串传递给new date()构造函数或ISODate()函数,可以指定特定日期。这些函数接受以下格式:

  • 新建日期(
    返回指定日期的ISODate
  • 新建日期(
    指定客户端本地时区中的日期时间,并返回以UTC表示的指定日期时间的ISODate
  • 新日期(
    以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);
    })
  })

我想从我的错误中更新一点

检查您是否在一个位数的时间内错过了前导零。

  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);
    })
  })
“2017-01-01T8:00:00”无效,将给出所述错误

“2017-01-01T08:00:00”有效