2015-08-19 168 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

我不完全確定,我從來沒有這樣做過。不過我已經編輯了我的答案。 –