「チャレンジ」コレクション内の文書を削除しようとしていますが、ユーザーがそのチャレンジの管理者ロールを持つ参加者リストにあるときだけです。Mongoose query - サブ文書の値で文書の条件を削除します。
現在のコードログchallenge deleted
ですが、チャレンジは実際には削除されません。ここで
は、チャレンジ・スキーマです:
Challenge.findOne({"_id" : req.params.challengeId, "participant" : {
$elemMatch : {participantID : req.user.id, participantRole : "admin"}
}}).remove(function(err, challenge){
if (err){
console.log(err);
res.redirect('/user/dashboard');
}
if (!challenge){
console.log("no challenge found");
res.redirect('/user/dashboard');
}
else {
console.log("challenge deleted");
res.redirect('/user/dashboard');
}
})
「req.user.idd」とは何ですか?それは実際に文書の 'ObjectId'として格納される値ですか?もしそうなら、配列エントリ用のスキーマは設定されておらず、mongooseはその値を "自動キャスト"する方法を知らない。したがって '文字列'は異なる型であるため、 'ObjectId'と一致しません。 –
そうです。だから私のモデルでは、参加者のための第2のスキーマを作成することができ、参加者はチャレンジスキーマの参加者ラインを参加者に置き換えることができます:{type:[participantSchema]、required:true}、 – GrepGrep
あなたは ' participantSchema] 'を実行するか、参加者:[{participantID:Schema.Types.ObjectId、participantRole:String}]'や実際にどのフィールドを使用することもできます。ポイントは、リクエストパラメータの「文字列」に「キャスト」が必要な場合は、「自動キャスト」を許可するスキーマを定義するか、値をキャストします。 –