Bạn có thể sử dụng phương pháp cập nhật nguyên tử như findOneAndUpdate ()
cho bài đăng của bạn, nơi bạn có thể chỉ định upert
quyền mua. If upert
là đúng và không có tài liệu nào phù hợp với tiêu chí truy vấn, findOneAndUpdate ()
chèn một tài liệu duy nhất. Đây là nơi bạn cũng có thể sử dụng $ gốc đẩy
toán tử để đẩy câu hỏi và câu trả lời mới vào mảng câu hỏi, thay vì sử dụng vòng lặp khi bạn có thể cho phép mongo thực hiện tất cả công việc trên máy chủ.
Ví dụ sau cho thấy cách bạn có thể cấu trúc lại mã của mình:
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;
Ở trên, các trường và giá trị của cả
và
tham số được tạo nếu
tham số chứa các biểu thức toán tử cập nhật. Bản cập nhật tạo một tài liệu cơ sở từ các mệnh đề bình đẳng trong
và sau đó áp dụng các biểu thức cập nhật từ
tham số.