2014-12-25 71 views
6

:firavunfaresi şema çoklu ref Bu nasıl (ama yanlış) gibi tek firavunfaresi şemanın bir özellik için çok ref yazmaya

var Schema = mongoose.Schema; 
var PeopleSchema = new Schema({ 
    peopleType:{ 
     type: Schema.Types.ObjectId, 
     ref: ['A', 'B'] /*or 'A, B'*/ 
    } 
}) 
+0

Bu, Mongoose'un belirli bir dokümana hangi modeli referans göstereceğini nasıl bildiğinden anlam ifade etmiyor mu? Ne yapmaya çalıştığın hakkında biraz daha bilgi verebilir misin? – JohnnyHK

+0

Teşekkürler.OK, örneğin, iki çeşit mal var, AGoods modeli ve BGoods modeli.Ve ben de onları kurtarmak için bir Mal modeli var (sadece ref kaydedin) .Bir iyi bulduğumda, ben arayacağım Mal modeli ve daha sonra bulursanız, gerçek iyi bilgileri AGoods veya BGoods'dan alacaktır. –

+0

Bunu yapmanın bir yolunu buldunuz mu? – timhc22

cevap

0

ben hala görmüyorum Gelincik mevcut sürümünde İstediğiniz gibi sözdizimi ile çoklu ref mümkün. Ancak, here numaralı belgede açıklanan "Veritabanlarında Doldurma" yönteminin bir bölümünü kullanabilirsiniz. Mongoose Dynamic References

var Schema = mongoose.Schema; 
var PeopleSchema = new Schema({ 
    externalModelType:{ 
     type: String 
    }, 
    peopleType:{ 
     type: Schema.Types.ObjectId, 
     refPath: 'externalModelType' 
    } 
}) 

Şimdi - İçinde harici model adını modelinize dize alan eklemek ve saklamak gerekir

var PeopleSchema = new Schema({ 
    peopleType:{ 
     //Just ObjectId here, without ref 
     type: mongoose.Schema.Types.ObjectId, required: true, 
    }, 
    modelNameOfThePeopleType:{ 
     type: mongoose.Schema.Types.String, required: true 
    } 
}) 

//And after that 
var People = mongoose.model('People', PeopleSchema); 
People.findById(_id) 
    .then(function(person) { 
     return person.populate({ path: 'peopleType', 
      model: person.modelNameOfThePeopleType }); 
    }) 
    .then(populatedPerson) { 
     //Here peopleType populated 
    } 
... 
4

ve refPath özelliği: Biz sadece açıkça nüfus yönteminin varyant nüfus mantığı taşımak gerekir Mongoose, ilgili modelden nesne ile peopleType'ı dolduracaktır.