mongoose / mongodb日期保存castError

时间:2011-09-23 04:46:33

标签: mongodb node.js mongoose

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

{stack:[Getter / Setter],     消息:'对象变为失败'[object Object]“',          名称:'CastError',      输入:'date',      值:        {毫秒: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)});
    });
});
}

3 个答案:

答案 0 :(得分:1)

如果您的应用程序中的任何位置需要datejs(或使用任何反过来需要datejs的模块),就会发生这种情况。

答案 1 :(得分:1)

Date.js是一个非常酷的库,但是在使用MongoDB时,默认实现会在Node.js应用程序中造成混乱。我建议你使用safe_datejs。您将能够使用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_datejs.DateType.CultureInfo

更多信息:https://github.com/firebaseco/safe_datejs

答案 2 :(得分:0)

您是否使用猫鼬定义了模型?

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