2014-12-03 22 views
9

Bu şemayıGelincik şema

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

mongoose.model('Stuff', StuffSchema); 

İşleri cezası var boş olabilir diziyi gerektirecek.

Şimdi ben mystuff Stuff kimlikleri dizisi içermesini istediğiniz, bu

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

içeren başka şema "Kargo" eklemem gerekiyor, ancak bu kodu

çalıştırırken bu doğrulama hatası ile başarısız Mystuff alanı için boş bir dizi kullanırsam
mongoose.model('Cargo').create(some data...) 

. Ben

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

için kargo şema değiştirirseniz iş gibi görünüyor ama ben mystuff alanı boş diziler

gerekli ve izin verilsin

Bunun gerçekleşmesi için ne yapabilirim?

cevap

11

Boş diziler varsayılan olarak oluşturulur (ayrıca bkz. this). required: true özniteliği, dizideki en az bir öğeye sahip olmasını gerektirir (source code). İstediğiniz davranışı almak için bu özelliği kaldırabilirsiniz.

(. Kenara, firavun faresi tüm şemalarla tipi objectId ile varsayılan _id alan atar gereksiz olduğunu bildirmek ve bir dize kullanıyor kesinlikle izin rağmen, tipik değil.)

Düzenleme Kasım 2017: Bu Mongoose 5'deki aday değişmedir. Bkz. https://github.com/Automattic/mongoose/issues/5139.

+0

Ben şema türü * ObjectId * olması gerektiğini düşünüyorum, başvurulan şema tanımlayıcı özellik türü ne olursa olsun olması gerekir. Dokümanlardaki örneğe bakın http://mongoosejs.com/docs/populate.html – dafyddPrys

+0

@dafyddPrys true - notu açıklığa kavuşturun. – ZachB