2015-06-29 51 views
0

這與thisthis不同。但他們非常有幫助。同一型號中的貓鼬級聯刪除

基本上,我有一個主題架構。如果某個主題被刪除,我想刪除其他主題。考慮一個圖形,刪除節點意味着刪除邊緣。

var schema = new Schema({ 
    title: { type: String, required: true, trim: true }, 
    srcId: { type: Schema.Types.ObjectId, validate: [edgeValidator, 'Set both srcId and destId, or neither'] }, 
    destId: Schema.Types.ObjectId, 
}); 

我想第二個蒙戈刪除在schema.pre('remove', ...)

運行,但我沒有在這一點上的典範。所以調用.find()或.remove()不起作用。最好的方法是什麼?

schema.pre('remove', function(next) { 
    var query = ''; 
    var self = this; 
    if (this.isEdge) { 
    query = 'MATCH()-[r:CONNECTION { mongoId: {_id} }]-() DELETE r;'; 
    } else { 
    query = 'MATCH (n:Topic { mongoId: {_id} })-[r]-() DELETE n,r;'; 
    } 
    // This is another database. 
    neo.query(query, this, function(err, data) { 
    if (err) return next(err); 

    if (self.isEdge) { 
     return next(); 
    } else { 
     // Now we're back to mongoose and mongodb 
     // Find and remove edges from mongo 
     schema.find({ mongoId: {  // <------ .find() is undefined 
     $or: [ 
      { srcId: self._id }, 
      { destId: self._id } 
     ] 
     }}, function(err, edges) { 
     edges.remove(next); 
     }); 
    } 
    }); 
}); 

回答

1

原來這很容易。

var Model = null; 

var schema = ... 

module.exports = Model = mongoose.model('Topic', schema); 

然後只是在預先刪除使用模型。一塊餡餅。