0

有人可以帮助尝试解释我在使用 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);
                });

我看不出我做错了什么,错误消息虽然很清楚,但对我没有多大帮助。

4

2 回答 2

0

顺序应该很重要。如果您models在将架构附加到模型之前进行定义,那么您将处理正确的对象。

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

至于报错信息,mongoose 在 build 中有一个验证系统,所以只要你保存它,它就会验证。默认情况下没有验证规则,所以它什么也不做。同样,您尝试保存的模型对象似乎缺少某些内容,可能是架构,也可能是验证代码。

于 2011-04-16T12:28:31.817 回答
0

通常,当我收到该错误时,是因为我试图保存一个不存在的字段,也许是因为我更改了表单或其他内容。

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

于 2011-04-17T01:58:00.293 回答