在使用Mongoose.js保存模型时,为什么会出现“无法调用未定义的doValidate”?

时间:2011-04-16 09:58:07

标签: javascript mongodb node.js mongoose

有人可以帮助尝试使用mongoose.js ORM解释我做错了什么,并就如何解决问题给我一些指导。

问题

尝试使用mongoose.js orm保存模型时收到错误:

无法调用未定义的方法'doValidate'

架构定义

我正在尝试使用此架构保存对象:

var myEntity = new Schema({
  objectId            : ObjectId
  ,title             : String
  , decription        : String
  , ownerId           : String
  , start               : {
     something : {
      // ...
     }
   //removed for brevity!
  }
  , end             : {
     something : {
      // ...
     }
   //removed for brevity!
    }
  , useruid           : String
  , _created          : { type : Date, "default": new Date()}
  , _updated          : { type : Date, "default": new Date()}
}
mongoose.model("MyEntity", MyEntity);

定义模型

我已将模型放在容器中,以便我可以通过执行以下操作来访问它们:

var xyz = new models['whatever']();

容器对象如下所示:

var models = {
  MyEntity : mongoose.model("MyEntity"),
};

创建模型

我创建模型,传入一个带有所有正确“映射”或属性的JSON对象:

var newEntity = new models.MyEntity(someObj);

保存模型

然后下面的代码就是我如何保存模型:

newEntity.save(function(error) {

                  if (error) {
                    console.log(error);
                  }

                  writePostEntityResponse(newEntity);
                });

我没有看到我做错了什么,错误信息虽然明确,但对我帮助不大。

2 个答案:

答案 0 :(得分:0)

订单应该很重要。如果在将模式附加到模型之前定义models,那么就要处理正确的对象。

var schema = new Schema(...);
mongoose.model('ModelName', mySchema)
var models = {
    "foo": mongoose.model('ModelName')
}
var xyz = new models['foo']();
xyz.save();

关于错误消息,mongoose在构建中有一个验证系统,所以每当你保存它时,它都会验证。默认情况下,没有验证规则,因此它什么都不做。再次看起来你试图保存的模型对象缺少某些东西,可能是模式,也许是验证代码。

答案 1 :(得分:0)

通常当我得到那个错误时,因为我试图保存一个不存在的字段,也许是因为我改变了一个表单或其他东西。

Mongo自动创建ObjectIds。您是否尝试删除该字段并查看会发生什么?