4

編集/回答:これはマングース>=3.0でも正常に機能します

私は次のようなマングーススキーマを持っています:

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

エラーが発生します:

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

何が得られますか?私は別のモデル/コントローラーの組み合わせを持っていましたが、これはほぼ完全に機能するカーボンコピーでした(名詞をほとんど見つけて置き換えましたが、それでも壊れて、ここでひどくおかしくなりました!)

4

2 に答える 2

3

「モデル」という名前が内部で使用されている可能性が高いと思います.VehicleSchemaの定義は、マングースが「文字列」型の関数であると予想するものを壊しています。

于 2012-08-14T06:59:28.390 に答える
2

partsスキーマ内のの定義は見落とされます。すべきではrefsないref:

parts: [ { type: ObjectId, ref: "Part" } ]
于 2012-08-12T15:15:02.930 に答える