mongoose/mongodb日期保存castError

mongoose/mongodb日期保存castError,mongodb,node.js,mongoose,Mongodb,Node.js,Mongoose,当我从数据库中获取一个文档,然后立即保存它时,我遇到了这个错误。但是,在初始插入时它被接受,并且看起来日期字段是空的,即使它们是必需的 {stack:[Getter/Setter], 消息:“值“[object]”的强制转换到日期失败, 名称:“卡斯特罗”, 键入:“日期”, 价值: {毫秒:0, 秒:0,, 分钟:0,, 小时:0, 日期:21, 第周:38, 月份:8, 年份:2011} 这是失败的架构和查询代码: var Event = new Schema({ id :

当我从数据库中获取一个文档,然后立即保存它时,我遇到了这个错误。但是,在初始插入时它被接受,并且看起来日期字段是空的,即使它们是必需的

{stack:[Getter/Setter], 消息:“值“[object]”的强制转换到日期失败, 名称:“卡斯特罗”, 键入:“日期”, 价值: {毫秒:0, 秒:0,, 分钟:0,, 小时:0, 日期:21, 第周:38, 月份:8, 年份:2011}

这是失败的架构和查询代码:

var Event = new Schema({
    id     : { type: String, index: true }
  , msg      : { type: String, lowercase: true, trim: true }
  , triggerOn      : { type: Date, required: true }
  , createdOn       : { type: Date, required: true }
  , triggered       : { type: Boolean, required: true }
});

exports.pullAndUpdateTest = function(){
    var Model = mongoose.model('Event');
    Model.find({ triggered: false }, function (err, docs) {
        if (err){
            console.log(err);
            return;
    }
    docs.forEach(function(doc, index, array){
        //date both appear to be null here
               console.log(doc.triggerOn);  //=> null / prints blank
        console.log(doc.createdOn); //=> null / prints blank

        doc.triggered = true;
        doc.save(function(err){ console.log(err)});
    });
});
}

你用猫鼬定义你的模型了吗

var Model = mongoose.model('Event', Event);

如果应用程序中的任何位置都需要datejs(或者使用任何需要datejs的模块),则会出现这种情况。

Date.js是一个非常酷的库,但是使用MongoDB时,默认实现将在Node.js应用程序中造成混乱。我建议你使用。您可以使用Date.js函数,但在调用任何Date.js函数之前,必须将
Date
值转换为Date.js对象

例如:

var safe_datejs = require('safe_datejs');
var today = new Date();
var unsafeToday = today.AsDateJs(); // Converting to Date.js object
var unsafeTomorrow = unsafeToday.clone().add({days:1}); // Work with Date.js a little
var tomorrow = unsafeTomorrow.AsRegularDate(); //converted back safe to be used with MongoDB
要更改区域性特定属性,请使用
safe\u datejs.DateType.CultureInfo


更多信息:

还发现了从未解决的确切问题最新版本的mongoose修复了此issueDate.js实际上非常适合在添加其他行为的同时保留原始日期模型。问题在于,Mongoose当前在对象上找到toObject方法时会跳过类型检查。有一个等待更正的拉取请求:。不再为true-mongoose的最新版本已修复。