当填充时出现Mongoose错误('model'不是一个函数)

4

编辑/回答: 在mongoose >= 3.0中也能正常工作

我有一个类似下面这样的mongoose模式:

mongoose = require 'mongoose'
ObjectId = mongoose.Schema.ObjectId

VehicleSchema = new mongoose.Schema
  make: String
  model: String
  year: Number
  body: String
  fuel: String
  transmission: String
  parts: [ { type: ObjectId, ref: 'Part' } ]

VehicleSchema.virtual('display_name').get ->
  return this.make + ' ' + this.model + ' ' + this.year

VehicleModel = mongoose.model 'Vehicle', VehicleSchema

module.exports =
  Schema: VehicleSchema
  Model: VehicleModel

我像这样给车辆添加“零部件”:

Vehicle.Model.findById id, (err, vehicle) ->
      unless err
        part = new Part.Model {
          ...details
        }
        part.save (err, doc) ->
          unless err
            vehicle.parts.push doc
            vehicle.save()
          else
            console.error err

看起来可以正常工作:

{ "_id" : ObjectId("5027bd4340b00b897a000002"), "body" : "car", "fuel" : "unleaded", "make" : "stackover", "model" : "modelname", "parts" : [ ObjectId("5027bd5140b00b897a000006") ], "transmission" : "manual", "year" : 21212 }

但是当我尝试填充这些部分时:
Vehicle.Model
  .findById(vehicle_id)
  .populate('parts')
  .exec (err, doc) ->
    if err
      console.error err
    else
      console.error doc

I get an error:

TypeError: Property 'model' of object { parts: [] } is not a function at model.populate [as _populate]

出了什么问题?我之前有一个几乎和这个一模一样的模型/控制器组合,完美地运作着(我基本上只是替换了名词,但它依然出现了问题,我真的很焦虑!)

2个回答

3
我认为很可能名称“model”是在内部使用的,而VehicleSchema的定义正在用“String”类型覆盖Mongoose期望是函数的内容。

这就是问题所在,将 model: String 改为 car_model: String,现在一切都完美运行了。谢谢! - Margh

2

模式中parts的定义似乎有些问题。 refs不应该是ref:吗?

parts: [ { type: ObjectId, ref: "Part" } ]

“'Part'”模型和模式在定义VehicleSchema之前是否完全被定义? - JohnnyHK
是的,即使我在服务器入口文件中定义模式并将它们传递给控制器,仍然会发生相同的错误。 - Margh
是的,我定义了部件模型,使用 console.err 进行检查以确保它已创建,然后创建了车辆模型并进行了错误检查,所有内容都按时按顺序创建完成。 - Margh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接