2012-05-12 16 views
23

Mam schemat, który wygląda trochę jak:Mongoose - używając wypełnić na tablicy 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 ] 
}); 

więc moja kolekcja odbiorców, jest zbiorem przedmiot id użytkownika na przedstawieniu mojego schematu/kolekcję.

muszę wypełnić je na zapytania, więc próbuję to:

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

Ale oczywiście „użytkownik” nie jest zapełnianie ...

Czy istnieje sposób mogę to zrobić ?

Odpowiedz

25

Użyj nazwy ścieżki schematu zamiast nazwy kolekcji:

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

ta nie działa dla mnie :( – SomethingOn

62

dla nikogo innego napotykając to pytanie .. Kod OP zawiera błąd w definicji schematu .. to powinno być:

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

panu po prostu uratował mnie świat bólu. * końcówki kapelusz * –

+0

dobry sposób! ale jak można zrobić tablicę unikalnym identyfikatorem obiektu? z żadnym duplikatu? – Gura

+0

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

Powiązane problemy