2014-12-25 14 views
6

Wie für eine Eigenschaft eines Multi ref Mungo Schema zu schreiben, wie folgt aus (aber falsch):Mungo Schema Multi ref für eine Eigenschaft

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

Das macht keinen Sinn, denn wie würde Mongoose wissen, welches Modell für ein bestimmtes Dokument verwendet werden soll? Kannst du etwas mehr darüber erzählen, was du zu tun versuchst? – JohnnyHK

+0

Thanks.OK, zum Beispiel habe ich zwei Arten von Waren, AGoods Modell und BGoods Modell.Und ich habe auch ein Warenmodell, um alle von ihnen zu speichern (nur speichern ref) .So wenn ich ein gutes finde, werde ich suchen Warenmodell, und wenn es dann gefunden wird, wird es die wirklich guten Informationen von AGoods oder BGoods bevölkern. –

+0

hast du einen Weg gefunden, dies zu tun? – timhc22

Antwort

0

In der aktuellen Version von Mongoose mir nicht noch sehen, dass Multi Ref möglich mit Syntax wie Sie wollen. Sie können jedoch einen Teil der Methode "Daten über Datenbanken hinweg" verwenden, wie beschrieben unter here. Wir müssen nur Bevölkerung Logik bewegen explizit Variante der Bevölkerungs Methode:

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

Sie sollten String-Feld zu Ihrem Modell und speichern externe Modellnamen in ihm, und refPath Eigenschaft hinzufügen - Mongoose Dynamic References

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

Jetzt Mongoose füllt peopleType mit dem Objekt aus dem entsprechenden Modell.