2014-12-03 36 views
9

我有這個模式貓鼬架構要求陣列,可以是空

var StuffSchema = new mongoose.Schema({ 
    _id: { type: String, required: true, unique: true }, 
    name: { type: String, required: true } 
}); 

mongoose.model('Stuff', StuffSchema); 

工作正常。

現在我需要添加另一個模式「貨物」含有這種

mystuff: { type:[String], ref: 'Stuff', required:true}, 

就是我想要的MyStuff包含的東西的ID的數組,但運行此代碼

當這種失敗,驗證錯誤
mongoose.model('Cargo').create(some data...) 

如果我使用mystuff字段的空數組。 看來,如果我改變貨物架構

mystuff: { type:[String], ref: 'Stuff'}, 

工作,但我不想被要求的MyStuff領域,並允許空數組

我能做些什麼來實現這一目標?

回答

11

空數組默認創建(另請參閱this)。屬性required: true要求數組中至少有一個元素(source code)。你可以刪除該屬性來獲得你想要的行爲。

(題外話,貓鼬會指定一個默認_id字段類型的ObjectId所有模式聲明這是不必要的,並使用一個字符串不典型,但肯定是不允許的。)

編輯2017年11月:此是Mongoose 5的候選變化。請參閱https://github.com/Automattic/mongoose/issues/5139

+0

我不認爲模式類型*有*爲ObjectId,它需要是被引用模式的標識符屬性的類型。請參閱文檔中的示例http://mongoosejs.com/docs/populate.html – dafyddPrys 2016-12-12 14:16:29

+0

@dafyddPrys true - 澄清說明,謝謝。 – ZachB 2016-12-12 19:03:43