2017-12-01 22 views
1


複数の参照を削除するという質問が1つあります。私は3つのスキーマモデル - >イベント、投稿、コメントを持っています。イベントは、ポストへの参照(一対多)およびコメントへのポストストア参照(一対多)を格納します。複数の参照を削除する


イベントスキーマ

const mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    ObjectId = mongoose.Schema.Types.ObjectId; 

const EventSchema = new Schema({ 
    organizer: { 
    type: ObjectId, 
    required: true, 
    }, 
    date: { 
    start: { 
     type: Date, 
     required: true, 
    }, 
    end: { 
     type: Date, 
     required: true, 
    }, 
    }, 
    name: { 
    type: String, 
    required: true, 
    }, 
    description: { 
    type: String, 
    required: true, 
    }, 
    category: { 
    type: String, 
    required: true, 
    }, 
    posts: [{ 
    type: ObjectId, 
    ref: 'Post', 
    }], 
}); 

module.exports = mongoose.model('Event', EventSchema); 

ポストスキーマ

const mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    ObjectId = mongoose.Schema.Types.ObjectId; 

const PostSchema = new Schema({ 
    author: { 
    type: String, 
    required: true, 
    }, 
    date: { 
    type: Date, 
    default: Date.now(), 
    required: true, 
    }, 
    content: { 
    type: String, 
    required: true, 
    }, 
    comments: [{ 
    type: ObjectId, 
    ref: 'Comment', 
    }], 
}); 

module.exports = mongoose.model('Post', PostSchema); 

コメントスキーマ

const mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    ObjectId = mongoose.Schema.Types.ObjectId; 

const CommentSchema = new Schema({ 
    author: { 
    name: { 
     type: String, 
     required: true, 
    }, 
    id: { 
     type: ObjectId, 
     required: true, 
    }, 
    }, 
    date: { 
    type: Date, 
    default: Date.now(), 
    }, 
    content: { 
    type: String, 
    required: true, 
    }, 
}); 

module.exports = mongoose.model('Comment', CommentSchema); 

今この状況を見てください:イベントを削除していますので、投稿(簡単)と関連するコメント(アップ)も削除する必要があります。ここで私の問題です:どのように簡単に彼のすべての参照(イベントを削除すると自動的にこの記事への投稿と関連するコメントを削除する)イベントを削除することができますか?私は本当に何も考えていない。手伝ってくれてありがとう!

答えて

0

0)あなたは、あなたがしたい記事に関連するすべてのコメントを見る)

const posts = eventObj.posts; 

const postObjs = Post.find({ 
    _id: { 
    $in: posts, 
    }, 
}); 

2を削除するには、イベントに関連するすべての投稿を見る)

cont eventObj = Event.findOne({ 
    _id: myEventId, 
}) 

1を削除したいイベントを読みます

const comments = postsObjs.reduce((tmp, x) => [ 
     ...tmp, 
     ...x.comments, 
    ], []); 

3を削除)すべてのコメント

01を削除します。
Comments.remove({ 
    _id: { 
     $in: comments, 
    }, 
    }); 

4)削除すべての記事

Post.remove({ 
    _id: { 
     $in: posts, 
    }, 
    }); 

5)削除イベント

Event.remove({ 
    _id: { 
     $in: event, 
    }, 
    }); 
関連する問題