2013-12-10 15 views
17

कैसे एम्बेड करें मैं अपने एप्लिकेशन मॉडल को परिभाषित कर रहा हूं और मेरे पास प्रत्येक मॉडल के लिए अलग-अलग फाइलें हैं जिन्हें मैं परिभाषित कर रहा हूं, मेरा सवाल है, मुझे एक मॉडल बनाने की आवश्यकता है जो उप दस्तावेज़, लेकिन यह एक और फाइल पर है, मैं अपने मॉडल पर उस स्कीमा का उपयोग कैसे कर सकता हूं?अलग-अलग फाइलों पर मोंगोस उप-दस्तावेज, उन्हें

var childSchema = new Schema({ name: 'string' }); 

var parentSchema = new Schema({ 
    children: [childSchema] 
}); 

मैं एक फ़ाइल user.js कहा जाता है कि उपयोगकर्ता मॉडल को परिभाषित करता है:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var userSchema = new Schema({ 

    _id   : Schema.Types.ObjectId, 
    username  : String, 

}); 


module.exports = mongoose.model('User', userSchema); 
क्या मेरा मतलब है कि सभी उदाहरण मैं देखा है बाल मॉडल और एक ही फाइल पर जनक, उदाहरण के घोषित है

और एक और sport.js बुलाया फ़ाइल पर मैं खेलों के लिए अन्य मॉडल परिभाषा है:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var sportSchema = new Schema({ 

    _id  : Schema.Types.ObjectId, 
    name  : String 

}); 

module.exports = mongoose.model('Sport', sportSchema); 

तो मेरे उपयोगकर्ता मॉडल पर मैं खेल th कि के लिए एक क्षेत्र परिभाषित करने की जरूरत ई उपयोगकर्ता का पालन करेंगे, लेकिन मैं के बाद से खेल परिभाषा एक और फ़ाइल में है कैसे है कि उप दस्तावेज़ को परिभाषित करने के पता नहीं है, मैं इस कोशिश की:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var SportsModel = require('sport'); 

var userSchema = new Schema({ 

    _id   : Schema.Types.ObjectId, 
    username  : String, 
sports   : [SportsModel] 

}); 


module.exports = mongoose.model('User', userSchema); 

लेकिन यदि बाद से सही तरीका है मुझे यकीन नहीं कर रहा हूँ क्या मैं निर्यात कर रहा हूँ मॉडल, स्कीमा नहीं है।

अग्रिम धन्यवाद, मैं ऑर्डर बनाए रखने के लिए अलग-अलग फ़ाइलों पर प्रत्येक मॉडल को परिभाषित करना चाहता हूं।

उत्तर

38

आप अपने schema संपत्ति के माध्यम से किसी मॉडल की स्कीमा तक पहुंच सकते हैं। तो यह काम करना चाहिए:

var userSchema = new Schema({  
    _id   : Schema.Types.ObjectId, 
    username  : String, 
    sports  : [SportsModel.schema]  
}); 
+0

बहुत बढ़िया, बहुत बहुत धन्यवाद! – kevinblanco

+9

इसे सही के रूप में चिह्नित किया जाना चाहिए। – arg20

+0

यह सोना, शुद्ध सोना है। – ggderas

7

उपयोग ref

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var userSchema = new Schema({ 
    _id  : Schema.Types.ObjectId, 
    username: String, 
    sports : [{ type: Schema.Types.ObjectId, ref: 'Sport' }] 
}); 

module.exports = mongoose.model('User', userSchema); 

संयोग से, ref के साथ, आप .populate('sports') उपयोग कर सकते हैं जब आप क्वेरी, और नेवला आप के लिए उन प्रकार का विस्तार होगा।

+0

बहुत बढ़िया धन्यवाद, और ऑब्जेक्ट आईडी क्यों है? – kevinblanco

+0

यह अनिवार्य रूप से एसक्यूएल में एक विदेशी कुंजी के बराबर है। लेकिन रेफ केवल ऑब्जेक्ट आईडी प्रकार के साथ काम करता है। – tandrewnichols

+0

पॉप्युलेट का उपयोग करना बहुत खतरनाक हो सकता है। मोंगोडीबी जैसे दस्तावेज़ आधारित डेटाबेस की बात आती है जब यह एक विरोधी पैटर्न है। यदि आपको उपयोगकर्ताओं के बीच अपने खेल साझा करने की आवश्यकता नहीं है तो उप-दस्तावेज़ों का उपयोग करना बेहतर है। असल में, यह याद रखना महत्वपूर्ण है कि मोंगोडीबी एक रिलेशनल डेटाबेस नहीं है। – catalyst294