2015-08-19 46 views
2

我有以下数据包含嵌套模式:猫鼬嵌套模式CastError

用户架构的

(function userModel() { 

var mongoose = require('mongoose'); 
var Entry = require('./entry'); 
var Schema = mongoose.Schema; 

var usersSchema = new Schema({ 
    entries: [Entry] 
}); 

module.exports = mongoose.model('Users', usersSchema); 

})(); 

Entry模式

(function entryModel() { 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var entrySchema = new Schema({ 
    timeStamp: { 
     type: Date, 
     default: Date.now 
    }, 
    data : [Schema.Types.Mixed] 
}); 

module.exports = mongoose.model('Entry', entrySchema); 

})(); 

我返回了以下错误:

errors: 
    { entries: 
     { [CastError: Cast to Array failed for value "[object Object]" at path "entries"]` 

据我可以告诉这是包含子文档的正确方法。我在这里做错了什么?

回答

3

此行module.exports = mongoose.model('Entry', entrySchema);出口model而不是schema。您需要导出entrySchema并用它来构建userSchema

编辑:

如果你想同时输出模型和模式,你需要做的是这样

module.exports = { 
    schema: entrySchema, 
    model: mongoose.model('Entry', entrySchema) 
} 

然而,一般而言, ,你很少需要导出实际的模型。这是因为只要你想在不同的文件中访问特定的模型,就可以简单地调用mongoose.model('Entry')并返回该模型实例。无需拨打require('.path/to/model')即可访问该模型。

+0

module.exports = entrySchema工作有没有办法通过以前的导出访问架构。像[Entry.Schema]之类的东西,Shema可用于导出? – byrdr

+0

我不完全确定,我从来没有这样做过。不过我已经编辑了我的答案。 –