2014-12-25 10 views
6

Come scrivere più ref per una proprietà di uno schema di mangusta, come questo (ma sbagliato):schema mangusta più ref per una proprietà

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

Questo non ha davvero senso in che modo Mongoose dovrebbe sapere quale modello fare riferimento per un determinato documento? Puoi fornire ulteriori dettagli su ciò che stai cercando di fare? – JohnnyHK

+0

Grazie.OK, ad esempio, ho due tipi di merci, il modello AGoods e il modello BGoods. Inoltre, ho anche un modello Merci per salvarli tutti (solo con il riferimento). Quando trovo un bene, cercherò Modello di merci, quindi, se trovato, popolerà le vere informazioni fornite da AGoods o BGoods. –

+0

hai trovato un modo per farlo? – timhc22

risposta

0

Nella versione attuale di Mongoose io ancora non vedo che multi ref possibile con sintassi come vuoi tu. Ma è possibile utilizzare parte del metodo "Popolamento su database" descritto here. Abbiamo solo bisogno di spostare la logica popolazione esplicitamente variante del metodo di popolazione:

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

Si dovrebbe aggiungere campo di stringa per il vostro modello e memorizzare il nome del modello esterno in esso, e la proprietà refPath - Mongoose Dynamic References

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

Ora Mongoose popolerà le personeTipo con oggetto dal modello corrispondente.