2016-06-26 9 views
2

MEANアプリケーション(Angular2)では、オブジェクト自体を削除するときに、参照されているすべてのオブジェクトを削除します。私はMongooseをミドルウェアを削除して使用しています。だから私のquestion.jsファイルは次のようになります。Mongoose:参照オブジェクトを削除するときに配列内の参照オブジェクトをすべて削除する

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var Answer = require('../models/answer'); 

var QuestionSchema = new Schema({ 
    content: {type: String, required: true}, 
    questionTxt: {type: String, required: true}, 
    position: {type: Number, min: 0, required: true}, 
    answers: [{type: Schema.Types.ObjectId, ref: "Answer"}], 
    followUpQuestions: [{type: Schema.Types.ObjectId, ref: "Question"}], 
    additionalInfoText: {type: String}, 
    lastChangedBy: {type: Schema.Types.ObjectId, ref: 'User'}, 
    lastChanged: {type: Date}, 
    isRoot: {type: Boolean} 
}); 

/********************************************** 
* Deletes all answers and questions referenced by this question 
***********************************************/ 

schema.post('remove', function(doc) { 
    var deletedQuestion = doc; 
     //code missing to find the answers and delete all referenced answers 
    }); 
}); 

module.exports = mongoose.model('Question', QuestionSchema); 

私は私が使用してものを見つけることができます知っている:

Answer.findById(doc.answer, function(err, doc){}); 

私も、今、私は複数の要素を見つけるために、findメソッドを使用することができることとクエリを追加します。しかし、私はちょうど1つの特定のIDを見つけるか、配列からそれらを削除するためのものを見つけました。しかし、私はオブジェクトがその配列内の参照だけでなく削除されることを望みます。

重複している場合は、この質問を終了しても構いませんが、グーグル、スタックオーバーフロー、関連トピックの後に答えが見つかりませんでした。あなたの助けのための

ありがとう!

+0

可能な重複[MongoDBの/マングースfindMany - 配列にリストされたIDを持つすべてのドキュメントを検索](http://stackoverflow.com/questions/8303900/mongodb-mongoose-findmany-find-all-documents-with- ids-listed-in-array)である。これは確かに重複しています。上記は、あなたが行く必要がある場所にあなたを取得する必要があります。 –

+0

@Brudus:ミドルウェアの使用に関するあらゆる更新。それはあなたのために働いたのですか? –

答えて

2

スキーマに自分自身の'remove' Mongoose middlewareを追加して、他のすべての文書、つまりその質問を参照する回答を削除するのはなぜですか。

例:削除カスケードを使用して興味を持っている場合、あなたはそれのために構築されたNPMモジュールの中に見ることができ

QuestionSchema.pre('remove', function(callback) { 
    // Remove all the docs that refers 
    this.model('Answers').remove({ Question_Id: this._id }, callback); 
}); 


:ミドルウェア機能では、あなたがこのような何かを行うことができます。 カスケード・リレーションズ - リンク NPM & Git

$ cascadeDeleteは、文書を削除すると、その関連文書を削除するかどうかを定義します。これがtrueに設定されている場合、メイン文書が削除されると、関連するすべての文書が削除されます。

+0

ありがとう、私は配列の中で一度にたくさんのドキュメントを削除する方法を見つけようとしていて、あなたの投稿から実現しました:* duh *、インスタンスメソッドを作成してforループを呼び出して呼び出します!ブーム!成功!ありがとうございました! – natureminded

関連する問題