findOneAndUpdate()のようなアトミック更新メソッドを使用できます。コード>
upsert
を指定できる投稿用 オプション。 upsert
の場合 trueであり、クエリ条件に一致するドキュメントはありません。 findOneAndUpdate()
単一のドキュメントを挿入します。ここで、ネイティブの $を使用することもできます。プッシュ
演算子を使用して、mongoにサーバー上のすべての作業を実行させることができる場合にループを使用するのではなく、新しい質問と回答を質問配列にプッシュします。
次の例は、コードをリファクタリングする方法を示しています。
var express = require('express');
var router = express.Router();
var Survey = require('../models/QBank');
router.post('/', function(req, res, next){
Survey.findOneAndUpdate(
{ "surveyname": req.body.sname }, /* <query> */
{ /* <update> */
"$push": {
"question": {
"que": req.body.que,
"ans1": req.body.ans1,
"ans2": req.body.ans2,
"ans3": req.body.ans3,
"ans4": req.body.ans4
}
}
},
{ "upsert": true }, /* <options> */
function(err, doc){ /* <callback> */
if(err) res.json(err);
else
req.flash('success_msg', 'Question saved to QBank');
res.redirect("/CreateSurvey");
}
);
});
module.exports = router;
上記では、両方の
のフィールドと値 および
の場合、パラメータが作成されます パラメータには、更新演算子式が含まれています。この更新により、
のequality句からベースドキュメントが作成されます。 パラメータを入力し、
から更新式を適用します パラメータ。