2014-07-20 17 views

cevap

14

Evet, ancak bir kaç seçeneğiniz vardır.


1. Seçenek: alt belge

Gerçekten alt belgeleri kullanmak istiyorsanız olarak C, ayrı bir model oluşturmak gerekmez. Referansınızı 'c' dizisine değiştirmeniz gerekiyor.

var C = new Schema({...}); 
var B = new Schema({c: [C]}); 
var A = new Schema({c: { type: ObjectId, ref: 'ModelB.c' }); 

var Model_A = mongoose.model('ModelA', A); 
var Model_B = mongoose.model('ModelB', B); 

Seçenek 2: Model

olarak C (Ben sadece bir alternatif olarak öne - Bir alt belge yanı sıra ayrı bir Model olarak 'C' oluşturmak beri örnek gereksiz görünüyor beri)

Alternatif olarak, ayrı koleksiyonlara sahip olmak anlamlı olabilir, her biri için bir mongoose modeli oluşturabilirsiniz. doğrudan her modeli başvurmak isteyebilirsiniz Bu durumda

var Model_A = mongoose.model('ModelA', A); 
var Model_B = mongoose.model('ModelB', B); 
var Model_C = mongoose.model('ModelC', C); 

: Her bir ayrı toplama olacak

var C = new Schema({...}); 
var B = new Schema({c: { type: ObjectId, ref: 'ModelC' }}); 
var A = new Schema({c: { type: ObjectId, ref: 'ModelC' }); 

Noktası

olası Evet ama C'yi bir model veya alt belge olarak seçmek isterseniz almanız gerekir.

+5

İlk çözüm benim için çalışmıyor. Benim durumumda B ve C aynı olsa da ('Kullanıcı 'arkadaşlarda arkadaşlıkların bir listesi vardır ve her arkadaşlığın diğer yöne-karşı tarafı için bir referansı vardır). Bunu anladım: 'MissingSchemaError: Schema" User.friends "modeline kayıtlı değil. – sol

+1

Aynı zamanda @ S0lll0s ile aynı sorunla karşılaşıyorum. Seçenek 1 çalışmıyor gibi görünüyor. – ramdog

+0

@ramdog Hala bir alt belge-öz referansı doldurmama izin veren bir çözüm bulamadım, sadece "boş" bir ObjectId kullanıyorum ve kendi başıma arama yapıyorum. Bir şey bulursanız haber verin ama çözüm bulunmadığına inanıyorum (henüz). – sol

İlgili konular