2014-12-03 3 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 सामग्री की आईडी की सरणी शामिल करना चाहते हैं की जरूरत है, लेकिन जब यह कोड

चल रहा यह मान्यता त्रुटि के साथ विफल
mongoose.model('Cargo').create(some data...) 

अगर मैं mystuff फ़ील्ड के लिए खाली सरणी का उपयोग करता हूं। यह काम करने के लिए अगर मैं

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

के कार्गो स्कीमा बदलने लगता है, लेकिन मैं MyStuff क्षेत्र की आवश्यकता है और अनुमति देने के किए जाने की खाली सरणियों

चाहते

मैं ऐसा करने के लिए क्या कर सकते हैं?

उत्तर

11

खाली सरणी डिफ़ॉल्ट रूप से बनाई जाती हैं (this भी देखें)। विशेषता required: true में सरणी में कम से कम एक तत्व होने की आवश्यकता है (source code)। आप वांछित व्यवहार प्राप्त करने के लिए उस विशेषता को हटा सकते हैं।

(अलावा, नेवला एक डिफ़ॉल्ट _id क्षेत्र सभी स्कीमा के लिए प्रकार ObjectId साथ प्रदान करती है की घोषणा यह अनावश्यक है, और एक स्ट्रिंग का उपयोग है विशिष्ट नहीं है, हालांकि निश्चित रूप से अनुमति दी।।)

संपादित नवंबर 2017: यह मोंगोस 5 में उम्मीदवार परिवर्तन है। https://github.com/Automattic/mongoose/issues/5139 देखें।

+0

मुझे नहीं लगता कि स्कीमा प्रकार * है * ऑब्जेक्ट आईडी होना है, इसे संदर्भित स्कीमा की पहचानकर्ता संपत्ति के प्रकार की आवश्यकता है। दस्तावेज़ों में उदाहरण देखें http://mongoosejs.com/docs/populate.html – dafyddPrys

+0

@dafyddPrys सत्य - नोट को स्पष्ट किया, धन्यवाद। – ZachB

संबंधित मुद्दे