関係:
one-to-one is a relationship
州の首都は1つだけで、首都は1つの州の首都ですone-to-many is a relationship
母親には多くの子供がいて、子供には母親が1人しかいないようにmany-to-many is a relationship
1冊の本を複数の著者または共著者が書くことができ、1人の著者が複数の本を書くことができるようにします。
1対1の関係-Project/Group
の場合 が削除されました。Assignment
を更新するにはどうすればよいですか。 スキーマ。
通常、1つのproject
があります 1つのassignment
にマッピングされます 同様に、1つのassignment
1つのproject
にマッピングされています 。ここでできることは、プロジェクトを削除してから、関連するproject
を見つけることです。 割り当てモデルで、それらの参照を削除します。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
Assignment.update({_id: project.assignment}},
{$pull: {projects: project._id}},
function (err, numberAffected) {
console.log(numberAffected);
} else {
console.log(err);
}
});
});
});
}
1対多の関係-Project/Group
の場合 が削除されました。Assignment
を更新するにはどうすればよいですか。 スキーマ。
このシナリオでは、プロジェクトを削除してから、すべてのassignment
を検索します。 このproject
に属します そしてそれらからその参照を削除します。ここでの状況は、1つのプロジェクトに多くの割り当てが存在する可能性があるということです。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
Assignment.update({_id: {$in: project.assingments}},
{$pull: {project: project._id}},
function (err, numberAffected) {
console.log(numberAffected);
} else {
console.log(err);
}
});
});
});
}
ミドルウェアを削除する
middleware
でも同じことができます ジョニーが指摘したように、それを修正しただけです。
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
通常、多くのproject
が存在する可能性があります assignment
に属する および多くのassignment
同じproject
に属する 。 assignment
があります Project
の列 1つのプロジェクトが複数の割り当てに関連するスキーマ。
注: ミドルウェアの削除はモデルでは機能せず、ドキュメントでのみ機能します。 remove
を使用する場合 ミドルウェアは、削除機能でproject
を見つけることを確認します 最初にidで、次に返されたdocument
で removeメソッドを適用すると、上記が機能するようになります...削除機能は次のようになります。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}