2012-05-12 12 views
23

ho uno schema che sembra un po 'come:Mongoose - utilizzando Populate su una serie di 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 ] 
}); 

Quindi la mia collezione di destinatari, è una raccolta di ID oggetto di riferimento mio utente schema/collezione.

ho bisogno per popolare questi su di query, quindi sto cercando questo:

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

Ma ovviamente 'utente' non è popolando ...

C'è un modo che io possa fare questo ?

risposta

25

Utilizzare il nome del percorso dello schema al posto del nome della collezione:

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

questo non sta funzionando per me :( – SomethingOn

62

Per chiunque altro imbattersi in questa domanda .. il codice del PO è un errore nella definizione dello schema .. dovrebbe essere:

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

È signore solo mi ha salvato un mondo di dolore. * punte cappello * –

+0

Buon modo! ma come si può fare una serie di unico oggetto id? senza duplicato? – Gura

+0

{type: Schema.ObjectId, ref: 'User', unique: true} –

Problemi correlati