2016-10-31 5 views
0

Ich lerne gerade Mongoose, und ich habe Parent und Child Dokumente wie folgt modelliert ..korrekte Art und Weise Feld von Unterlagen in Mongoose verwenden

var parent = new Schema({ 
    children: [{ type: Schema.Types.ObjectId, ref: 'Child' }], 
}); 

var Parent = db.model('Parent', parent); 

var child = new Schema({ 
    _owner: { type: Schema.Types.ObjectId, ref: 'Parent' }, 
}); 

var Child = db.model('Child', child); 

Wenn ich entfernen die Parent Ich möchte auch alle entfernen die Objekte Child, auf die im Feld children verwiesen wird. Another question auf Stackoverflow stellt fest, dass die pre Middleware-Funktion der Eltern können so ...

parent.pre('remove', function(next) { 
    Child.remove({_owner: this._id}).exec(); 
    next(); 
}); 

geschrieben werden, die, dass alle untergeordneten Objekte werden gelöscht gewährleisten sollte. In diesem Fall gibt es jedoch einen Grund, das Array children im Parent-Schema zu haben? Könnte ich auch Operationen zum Erstellen/Lesen/Aktualisieren/Löschen nicht ausführen? Zum Beispiel, wenn ich alle Kinder möchte, die ich tun könnte?

Child.find({_owner: user._id}).exec(function(err, results) { ... }; 

Alle Beispiele, die ich von Beziehungen ‚hasMany‘ Mungo gesehen habe verfügen über eine wenn auch ‚Kinder‘ Array, zeigen aber nicht, wie es dann verwendet wird. Kann jemand ein Beispiel geben oder einen Zweck dafür geben?

Antwort

1

Nun, Sie definieren zwei verschiedenen Sammlungen, Kind und Eltern in ->

var Parent = db.model('Parent', parent);

var Child = db.model('Child', child);

So sind Sie Benutzer frei, das Kindermodell, wie Sie möchten, indem hinzufügen tun/entfernen/aktualisieren. Durch das Speichern sie als ‚ref‘ können Sie tun:

Parent.find({_id:'idofparent'}) 
.populate('children') 
.exec((err, result) => { .... } ) 

Ihre Eltern werden dann mit ihren Kindern bevölkert werden.!

+0

Danke! Wenn ich also verstehe, dass ich die refs in einem Array aufbewahre, kann ich sie abrufen, indem ich 'populate' aufruft, anstatt jedes Kind mit einer Abfrage auf dem Kindmodell abzurufen. Aber abgesehen davon, gibt es keinen Grund, ein Kind-Array zu pflegen. – CSharp

+1

Ja, bevölkert tut diese Abfragen für Sie so sehr praktisch, wenn Sie alle Eltern eines Elternteils abholen wollen :) – raubas

+0

Großartig! Danke für die Klarstellung – CSharp

Verwandte Themen