2012-05-12 16 views
23

Tengo un esquema que se ve un poco como:Mangosta - Llenar el uso en una gran variedad de 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 ] 
}); 

Así que mi colección de receptores, es una colección de objetos de referencia Identificación mi usuario del esquema/colección.

necesito para poblar estos en consulta, por lo que estoy tratando esto:

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

Pero, obviamente, 'usuario' no está poblando ...

¿Hay alguna manera de hacer esto ?

Respuesta

25

Utilice el nombre de la ruta de esquema en lugar del nombre de la colección:

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

Esto no está funcionando para mí :( – SomethingOn

62

Para cualquier otra persona que viene a través de esta pregunta .. el código de la OP ha producido un error en la definición del esquema .. que debe ser:

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

usted, señor sólo me salvó un mundo de dolor. * * consejos sombrero –

+0

buen sentido! pero ¿cómo se puede hacer una gran variedad de único identificador de objeto? sin duplicado? – Gura

+0

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

Cuestiones relacionadas