私はThinksterのMEANスタックチュートリアル(https://thinkster.io/tutorials/mean-stack)に従っていますが、削除操作の実装方法はわかりません。MongoDB:削除された投稿のコメントをすべて削除するには?
私は現在、次のスキーマを持っている:
var PostSchema = new mongoose.Schema({
title: {type: String, required: true, maxlength: 140},
link: {type: String, required: true, maxlength: 300},
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});
var CommentSchema = new mongoose.Schema({
body: {type: String, maxlength: 200, minlength: 1},
post: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' }
});
私はCRUD操作のための角度の工場を持っています。私はすべての関連コメントのどこかに残っている。このように投稿を削除する場合、残念ながら
// DELETE a post
router.delete('/posts/:post', function(req, res, next) {
Post.remove({_id: req.params.post}, function(err, post) {
if (err)
res.send(err);
res.json({ message: 'Successfully deleted' });
});
});
:
o.deletePost = function(id) {
return $http.delete('/posts/' + id, null, {}
}).success(function(res){
$window.location.href = '/#/home';
return res.data;
});
};
そして、このような削除ルックスのための私のルータ:私は現在、次のファクトリメソッドで投稿を削除しますデータベース。だから、私の質問はです投稿を削除している間、その投稿に関連するコメントをすべて削除するにはどうすればいいですか?
私はGoogleに答えを求めましたが、どうにかしてMongoDBのミドルウェアを使用する必要があるようです。私が試した:
// Remove Post
module.exports.removePost = function(id, callback){
Post.findById(id, function (err, doc) {
if (err) {}
doc.remove(callback);
})
}
//Remove comments related to post
PostSchema.pre('remove', function(next) {
this.model('Comment').remove({ post: this._id }, next);
});
しかし、私は私のCRUDの工場からそれを呼び出す方法を知らないので、これは、何もしません。私がしてもそれが正しいかどうかわからない。だから、どんな助けも歓迎されるだろう。 :)
「正常に削除されました」というメッセージは表示されませんか? [Postman](https://www.getpostman.com/)でテストしてみましたか? – gh0st
@ gh0st質問をルータの情報で更新しました。 – catfood
@ gh0stメッセージが表示され、問題なく投稿を削除できます。問題は、投稿を削除すると、関連するすべてのコメントがデータベースに「浮動」しているということです。私は、関連する投稿が削除されたときにそれらを取り除きたいです。 – catfood