したがって、私はNodeに小さなブログのようなプロジェクトを構築しています。孤立したデータベース参照に関する問題が発生しています。私はお互いを参照する別々のファイルに2つのモデルを持っています。MongoDBの孤立した参照を正しく削除する方法は?
ここでは私のモデルがあります:あなたは、言う投稿を削除する場合
// ./models/user
Var UserSchema = mongoose.Schema({
name: String,
posts: [{type: mongoose.SchemaTypes.ObjectId, ref:'Post'}]
});
// ./models/post
var PostSchema = mongoose.Schema({
title:String,
post_body: String,
posted_by: mongoose.SchemaTypes.ObjectId
});
私の質問は、どのようにユーザーのポスト配列内の参照を削除しますか?私は、削除ルートの前に実行するミドルウェアを作成し、実際に投稿を削除する前にユーザーの投稿配列内の参照を削除することができたと考えました。それはそれについての最善の方法と考えられるでしょうか?私はこのようなスキーマに「前」関数を使用してスタック上のポストを見つけました:Automatically remove referencing objects on deletion in MongoDB:ここ
// ./models/post
PostSchema.pre('remove', function(next){
this.model('User').remove({posts: this._id}, next);
});
は、実際のスタックポストです。私はこの仕事を得ることができませんでした。私は、しかし、参照を削除するカスタムミドルウェアを実装しましたが、ベストプラクティスではないかもしれないと感じます。すべてのヒント/アドバイスは非常に高く評価されます。ありがとう!
私はそれを考えなかったとは思えません。アップデートを使用すると、ここでは完全に意味をなさないそれを感謝します。さて、あなたが投稿した小さなスニペットを試しましたが、オブジェクトIdはユーザーの投稿配列の中に残ります。 pre関数では、 'PostSchema.pre( 'update' ...'と 'PostSchema.pre( 'remove' ...')の両方を使用しましたが、参照の削除はありません。 – elloM8
私はそれを動作させました。ドキュメントに記載されているように、 '削除'フックを設定すると、MyModel.remove()を呼び出すときではなく、myDoc.remove()を呼び出すときに呼び出されます。あなたの助けに感謝します。これは私が以前行っていたことよりもはるかにクリーンです。 – elloM8