2015-02-24 2 views
2

Я пытаюсь подтолкнуть объект в массив Mongoose, но я получаю следующее сообщение об ошибке:Mongoose TypeError: Object {} не имеет метода 'литой'

TypeError: Object {} has no method 'cast' 
at Array.MongooseArray._cast (/vagrant/kernl/node_modules/mongoose/lib/types/array.js:108:30) 
at Object.map (native) 
at Array.MongooseArray.push (/vagrant/kernl/node_modules/mongoose/lib/types/array.js:262:23) 
at Promise.<anonymous> (/vagrant/kernl/routes/plugins.js:128:41) 
at Promise.<anonymous> (/vagrant/kernl/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8) 
at Promise.EventEmitter.emit (events.js:98:17) 
at Promise.emit (/vagrant/kernl/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38) 
at Promise.fulfill (/vagrant/kernl/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20) 
at handleSave (/vagrant/kernl/node_modules/mongoose/lib/model.js:133:13) 
at /vagrant/kernl/node_modules/mongoose/lib/utils.js:408:16 

схема (Plugin)

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    PluginVersion = require('./PluginVersion'); 

var PluginSchema = new Schema({ 
    name: { type: String, required: true }, 
    description: { type: String }, 
    created_date: { type: Date, default: Date.now }, 
    active: { type: Boolean, default: true }, 
    user: { type: Schema.Types.ObjectId, ref: 'User' }, 
    versions: [PluginVersion] 
}); 

module.exports = mongoose.model('Plugin', PluginSchema); 

схемы (PluginVersion)

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

var PluginVersionSchema = new Schema({ 
    version: { type: String, required: true }, 
    downloads: { type: Number, default: 0 }, 
    size: { type: Number, required: true }, 
    updatedChecks: { type: Number, default: 0 }, 
    fileName: { type: String, required: true } 
}); 

module.exports = mongoose.model('PluginVersion', PluginVersionSchema); 

код, где происходит ошибка

var file = req.files.file, 
    version = new PluginVersion(); 
    version.version = req.body.version; 
    version.size = file.size; 
    version.fileName = file.path; 

    version.save(function(err) { 
     if(err) { res.send(err); } 
     plugin.versions.push(version); // <---- Problem. 
     plugin.save(function(err) { 
      if(err) { res.send(err); } 
       res.status(201); 
       res.json(version); 
      }); 
     }); 
    }); 

Я довольно новый для использования Mongoose, так что я, возможно, просто пробел в моих знаниях. Был еще один вопрос, подобный этому, но он ссылался на необходимость использования определений схем вместо определений моделей, которые, я думаю, я уже делаю правильно.

+1

вы можете попробовать это и посмотреть, если он работает? 'mongoose.model ('PluginVersion', PluginVersionSchema);' 'export = module.exports = PluginVersionSchema;' –

+0

@FelipePereira Где я должен его удалить? –

+1

в конце определения PluginVersion –

ответ

5

При встраивании одной схемы в другую вы указываете встроенный тип, используя его схему, а не модель. Так PluginSchema должен определить versions поле, как это вместо:

var PluginSchema = new Schema({ 
    name: { type: String, required: true }, 
    description: { type: String }, 
    created_date: { type: Date, default: Date.now }, 
    active: { type: Boolean, default: true }, 
    user: { type: Schema.Types.ObjectId, ref: 'User' }, 
    versions: [PluginVersion.schema] 
}); 
+0

Удивительно, это была проблема. Я думал, что, поскольку он уже был определен как схема, он уже был представлен таким образом. Благодаря! –

Смежные вопросы