2017-12-31 143 views
1

Also im Wesentlichen, was ich habe, ist ein Standortindex. Hier ist das Standortschema:Wie lösche ich auch die ObjectId aus dem Elternelement mit Mungo?

In diesem Schema habe ich auch "Fänge" im Wesentlichen nur einen Kommentar. Hier ist das Schema für die:

var catchSchema = mongoose.Schema({ 
    species: String, 
    weight: String, 
    image: String, 
    catchlocation: String, 
    description: String, 
    timePosted: { type: Date, default: Date.now }, 
    author: { 
     id: { 
      type: mongoose.Schema.Types.ObjectId, 
      ref: "User" 
     }, 
     username: String 
    } 
}, 
    {timestamps: true} 
); 

Ich erlaube ein Benutzer eine „fangen“ (oder Kommentar) mit dieser Route zu löschen:

app.delete("/locations/:id/catch/:catchid", isUserPost, function(req, res){ 
    Catch.findByIdAndRemove(req.params.catchid, function(err){ 
     if(err){ 
      res.redirect("back"); 
     } else { 
      req.flash("success", "Your catch has been deleted."); 
      res.redirect("/locations/" + req.params.id); 
     } 
    }); 
}); 

Nun zum Problem, wenn die „fängt“ (aka comment) wird gelöscht, es wird aus der Sammlung "catches" gelöscht, ABER die ObjectId bleibt am Speicherort. Wie würde ich mit Mungo auch die catch ObjectId aus dem Elternelement löschen?

+0

Mögliches Duplikat [Entfernen eineindeutig und einmehrdeutige Referenzen - Mungo] (https://stackoverflow.com/questions/32674280/Entfernen-One-One-One-Many-Referenzen-Mungo) – Veeram

Antwort

0

Sie müssen es manuell tun. Meine sugestion ist es mit Mongoose Middleware zu tun, mit Pre-remove Haken:

catchSchema.pre('remove', function(next) { 
    // you can use 'this' to extract the _id this._id and find it in locations documents and remove where it appears 
    /** do the thing **/ 
    next(); 
}); 
+1

Wusste nicht einmal, dass es existiert. Danke für die Hilfe. – Bud

Verwandte Themen