Mongoose:更新文档时,转换为日期失败

Jak*_*kub 3 javascript mongoose mongodb node.js

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

reservationDay: {
        type: Date,
        default: Date.now
}
Run Code Online (Sandbox Code Playgroud)

我可以使用此字段创建文档而不会出现问题.当我在创建它之后的console.log时,我得到:

reservationDay:  Thu Nov 20 2014 04:45:00 GMT+0100 (CET)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试更新此文档时,即使不更改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"
Run Code Online (Sandbox Code Playgroud)

以下是我在服务器端更新此文档的方法:

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);
                        });
                    });
Run Code Online (Sandbox Code Playgroud)

并且req.body中的日期没有改变.

什么可能导致此错误的想法?

谢谢!

cdb*_*rin 11

"20/11/2014 04:11"是一种无效的ISODate格式.您正在某处将reservationDate转换为无效格式的字符串.您需要将其转换为有效的ISODate格式(前一天):

new Date("11/20/2014 04:11") // Thu Nov 20 2014 04:11:00 GMT+0100 (CET)
new Date("2014/11/20 04:11") // Thu Nov 20 2014 04:11:00 GMT+0100 (CET)
new Date("20/11/2014 04:11") // Invalid Date
Run Code Online (Sandbox Code Playgroud)

为了便于操作日期格式,我建议使用moment.js