2017-10-24 1 views
0

Ich habe zwei Schemas, eventSchema und personSchema wie unten dargestellt:Mongoose entfernen Dokument mit Referenzen

var mongoose = require('mongoose') 
    , Schema = mongoose.Schema 

var eventSchema = Schema({ 
    title  : String, 
    location : String, 
    startDate : Date, 
    endDate : Date 
}); 

var personSchema = Schema({ 
    firstname: String, 
    lastname: String, 
    email: String, 
    dob: Date, 
    city: String, 
    eventsAttended: [{ type: Schema.Types.ObjectId, ref: 'Event' }] 
}); 

var Event = mongoose.model('Event', eventSchema); 
var Person = mongoose.model('Person', personSchema); 

Wie kann ich alle eventsAttended aus einem gelöschten Person entfernen?

Zum Beispiel, wenn ich eine Person entfernen, dann erwarte ich, dass alle Ereignisse, die dieser Person zugeordnet sind, entfernt werden.

Dies ist mein Code:

Person.findOneAndRemove({_id: req.body._id}, (err, response) => { 
    // remove the events assigned to this person 
    }) 

Antwort

1

Mit Mungo können Sie pre und postmiddleware auf Schemata verwenden:

personSchema.post('remove', removeLinkedDocuments);

Dann in der removeLinkedDocuments Rückruf können Sie alle verknüpften Dokumente entfernen :

function removeLinkedDocuments(doc) { 
    // doc will be the removed Person document 
    Event.remove({_id: { $in: doc.eventsAttended }}) 
} 

Hinweis ist die Middleware nur für die folgenden Verfahren genannt (zu der verknüpften Dokumentation entnehmen):

  • Zählung
  • finden
  • FindOne
  • findOneAndRemove
  • findOneAndUpdate
  • Update

Um die Dokumente "manuell" in Ihrem Rückruf zu entfernen, tun Sie möglicherweise

+0

Dies funktioniert perfekt! Würdest du mir bitte auch sagen, wie ich einer "Person" ein neues "Event" hinzufügen kann? – Valip

+0

Mongoose unterstützt Methoden wie push oder addToSet für Filialdokumente: http://mongoosejs.com/docs/api.html#types_array_MongooseArray.addToSet - in Ihrem Beispiel können Sie also 'aPersonDoc.eventsAttended.addToSet (anEventId)' oder 'aPersonDoc verwenden .eventsAttended.push (anEventId) ' – DevDig

Verwandte Themen