2012-05-12 13 views
23

की एक सरणी पर आबाद का उपयोग कर मैं एक स्कीमा कि थोड़ा की तरह लग रहा है:नेवला - ObjectId

var conversationSchema = new Schema({ 
    created: { type: Date, default: Date.now }, 
    updated: { type: Date, default: Date.now }, 
    recipients: { type: [Schema.ObjectId], ref: 'User' }, 
    messages: [ conversationMessageSchema ] 
}); 

तो मेरी प्राप्तकर्ताओं संग्रह, वस्तु आईडी के मेरे उपयोगकर्ता स्कीमा/संग्रह को संदर्भित करने का एक संग्रह है।

मैं क्वेरी पर इन पॉप्युलेट करने के लिए की जरूरत है, तो मैं इस कोशिश कर रहा हूँ:

वहाँ एक रास्ता मैं यह कर सकता है

Conversation.findOne({ _id: myConversationId}) 
.populate('user') 
.run(function(err, conversation){ 
    //do stuff 
}); 

लेकिन स्पष्ट रूप से 'उपयोगकर्ता को आबाद करने नहीं है ... ?

उत्तर

25

संग्रह नाम के बजाय स्कीमा पथ के नाम का उपयोग करें:

Conversation.findOne({ _id: myConversationId}) 
.populate('recipients') // <== 
.exec(function(err, conversation){ 
    //do stuff 
}); 
+1

यह मेरे लिए काम नहीं कर रहा :( – SomethingOn

62

किसी और को इस सवाल के पार आने के लिए .. ओ पी के कोड स्कीमा परिभाषा में किसी त्रुटि .. यह होना चाहिए है:

var conversationSchema = new Schema({ 
    created: { type: Date, default: Date.now }, 
    updated: { type: Date, default: Date.now }, 
    recipients: [{ type: Schema.ObjectId, ref: 'User' }], 
    messages: [ conversationMessageSchema ] 
}); 
mongoose.model('Conversation', conversationSchema); 
+2

आप सर सिर्फ मुझे दर्द की एक दुनिया को बचा लिया। * सुझावों टोपी * –

+0

अच्छा तरीका! लेकिन कैसे आप अद्वितीय वस्तु आईडी की एक सरणी? कोई डुप्लिकेट के साथ कर सकते हैं? – Gura

+0

{प्रकार: Schema.ObjectId, रेफरी: 'उपयोगकर्ता', अद्वितीय: सच} –

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