2012-05-12 32 views
23

Tôi đã có một schema mà trông hơi giống:Mongoose - sử dụng cư trên một mảng của 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 ] 
}); 

Vì vậy, bộ sưu tập người nhận của tôi, là một tập hợp các đối tượng id của tham khảo sử dụng schema/bộ sưu tập của tôi.

tôi cần phải cư này trên truy vấn, vì vậy tôi đang cố gắng này:

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

Nhưng rõ ràng là 'sử dụng' không Populating ...

Có cách nào tôi có thể làm điều này ?

Trả lời

25

Sử dụng tên của con đường schema thay vì tên bộ sưu tập:

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

Đây không phải đang làm việc cho tôi :( – SomethingOn

62

Đối với bất cứ ai khác đến qua câu hỏi này .. mã của OP đã một lỗi trong định nghĩa schema .. nó nên là:

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

bạn thưa ông chỉ cứu tôi một thế giới của đau đớn. * lời khuyên mũ * –

+0

Tốt cách! nhưng – Gura

+0

làm thế nào bạn có thể làm một loạt các đối tượng id duy nhất? với không trùng lặp? {type: Schema.ObjectId, ref: 'Người dùng', duy nhất: đúng} –

Các vấn đề liên quan