2012-05-12 34 views
23

Ich habe ein Schema bekommt, die ein bisschen wie folgt aussieht:Mungo - mit Populate auf einem Array von 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 ] 
}); 

Sammlung Also meines Empfängers, ist eine Sammlung von Objekt-ID mein Benutzerschema/Sammlung verweisen.

Ich brauche diese auf Abfrage zu füllen, so versuche ich, dies:

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

Aber offensichtlich ‚user‘ wird bevölkern nicht ...

Gibt es eine Möglichkeit kann ich dies tun ?

Antwort

25

den Namen des Schemas Pfad verwenden anstelle des Kollektionsnamen:

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

Dies ist für mich nicht funktioniert :( – SomethingOn

62

Für alle anderen über diese Frage kommen .. Sie den Code des OP hat .. ein Fehler in der Schema-Definition sollte es sein:

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

Sie Herr hat mich gerettet nur eine Welt des Schmerzes. * Tipps Hut * –

+0

gute Art und Weise! aber wie kann man eine Reihe von einzigartigen Objekt-ID zu tun? Wenn kein Duplikat? – Gura

+0

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

Verwandte Themen