2013-10-10 7 views
15

नहीं है क्या एक संदर्भ मॉडल के क्षेत्र के साथ एक मोंगोस मॉडल को पॉप्युलेट करना संभव है जो _id नहीं है ... उदा। एक उपयोगकर्ता नामएक ऐसे क्षेत्र के साथ एक मोंगोज़ मॉडल पॉप्युलेट करें जो एक आईडी

तो जैसे

var personSchema = Schema({ 
    _id  : Number, 
    name : String, 
    age  : Number, 
    stories : { type: String, field: "username", ref: 'Story' } 
}); 
+2

2017 को फास्ट आगे, और फ़्रॉस्टी का जवाब स्वीकार किए जाते हैं जवाब होना चाहिए। – user553086

उत्तर

-2

कुछ आप populate() एपीआई का उपयोग कर सकते हैं। एपीआई अधिक लचीला है, आपको स्कीमा में ref और field निर्दिष्ट करने की आवश्यकता नहीं है।

http://mongoosejs.com/docs/api.html#document_Document-populate http://mongoosejs.com/docs/api.html#model_Model.populate

आप मिश्रण और find() के साथ मेल कर सकते हैं।

+3

मैं दस्तावेज़ों से नहीं समझ सकता। क्या आप एक उदाहरण पूछ सकते हैं? –

+5

दस्तावेज पढ़ने के बाद ही एसओ आ रहा है, अगर मुझे यह समझ में आया तो मैं यहां जवाबों की खोज नहीं करूंगा। – Azder

+0

संदर्भ जोड़ने के द्वारा आपको अभी भी उपयोग करने के लिए अपनी स्कीमा को कॉन्फ़िगर करने की आवश्यकता है। – lukaserat

3

ऐसा लगता है कि वे _id का उपयोग करने के लिए लागू होते हैं, और शायद हम इसे भविष्य में अनुकूलित कर सकते हैं।

यहाँ Github पर मुद्दा है https://github.com/LearnBoost/mongoose/issues/2562

0

यह एक मॉडल संबंधित इसी email क्षेत्र के आधार पर उपयोगकर्ता के साथ आमंत्रित बुलाया पॉप्युलेट करने के लिए $ देखने कुल का उपयोग करने का एक उदाहरण है:

Invite.aggregate(
     { $match: {interview: req.params.interview}}, 
     { $lookup: {from: 'users', localField: 'email', foreignField: 'email', as: 'user'} } 
    ).exec(function (err, invites) { 
     if (err) { 
     next(err); 
     } 

     res.json(invites); 
    } 
); 

यह शायद आप जो करने की कोशिश कर रहे हैं उसके समान ही।

24

इस के बाद से नेवला 4.5 समर्थित है, और virtuals population कहा जाता है।

आप अपने स्कीमा के बाद परिभाषाएँ और से पहले मॉडल, इस तरह बनाने के लिए अपने विदेशी कुंजी संबंधों को परिभाषित करने के लिए है:

// Schema definitions 

BookSchema = new mongoose.Schema({ 
     ..., 
     title: String, 
     author_id: Number, 
     ... 
    }, 
    // schema options: Don't forget this option 
    // if you declare foreign keys for this schema afterwards. 
    { 
     toObject: {virtuals:true}, 
     // use if your results might be retrieved as JSON 
     // see http://stackoverflow.com/q/13133911/488666 
     //toJSON: {virtuals:true} 
    }); 

PersonSchema = new mongoose.Schema({id: Number, ...}); 


// Foreign keys definitions 

BookSchema.virtual('author', { 
    ref: 'Person', 
    localField: 'author_id', 
    foreignField: 'id', 
    justOne: true // for many-to-1 relationships 
}); 


// Models creation 

var Book = mongoose.model('Book', BookSchema); 
var Person = mongoose.model('Person', PersonSchema); 


// Querying 

Book.find({...}) 
    // if you use select() be sure to include the foreign key field ! 
    .select({.... author_id ....}) 
    // use the 'virtual population' name 
    .populate('author') 
    .exec(function(err, books) {...}) 
+2

अब यह स्वीकार्य उत्तर नहीं होना चाहिए? – Rexford

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