2017-04-27 5 views
0

ich habe:Mongoose löschen verschachtelte Unterdokumente und Dokumente

let userSchema = mongoose.Schema({ 
email: {type: String, required: true, unique: true}, 
passwordHash: {type: String, required: true}, 
fullName: {type: String, required: true}, 
salt: {type: String, required: true}, 
ads: [{type: ObjectId, ref: 'Ad'}], 
roles: [{type: String}] 

}

let adSchema = mongoose.Schema({ 
author: {type: ObjectId, ref: 'User'}, 
title: {type: String, required: true}, 
category: {type: ObjectId, ref: 'Category', required: true}, 
town: {type: ObjectId, ref: 'Town', required: true}, 

} );

let categorySchema = mongoose.Schema({ 
name: {type: String, required: true, unique: true}, 
ads: [{type: ObjectId, ref: 'Ad'}] 

});

let townSchema = mongoose.Schema({ 
name: {type: String, required: true, unique: true}, 
ads: [{type: ObjectId, ref: 'Ad'}] 

} );

Ich möchte zum Beispiel Stadt nach ID finden und entfernen Sie alle Anzeigen darin (und natürlich, um die Anzeigen von ihren Kategorien und Autoren zu entfernen) .Wie kann ich das tun?

Antwort

0

Ich würde vorschlagen, bulk das Array von Objekt Ids bekommen und es so mit:

Ad.remove({_id: {$in: Ad_ids_array}}, function(){...}); // and so on 

Sie eine Vorbestellung entfernen Haken in der Anzeige-Schema-Definition wie folgt hinzufügen:

adSchema.pre('remove', function(next) { 
    let lethis = this; 
    // Pull ad out of all the Category docs that reference the removed ad. 
    this.model('Category').update({}, { $pull: {ads: lethis._id}}, { safe: true }, next); 

    // Pull ad out of all the User docs that reference the removed ad. 
    this.model('User').update({}, { $pull: {ads: lethis._id}}, { safe: true }, next); 
}); 

Dadurch wird die Anzeige aus den Kategorien und Nutzern entfernt, die sie in ihrem Anzeigenarray haben.

Verwandte Themen