Programming/온라인 영어암기 단어장 개발
온라인 영어 암기 단어장 만들기(9) - 학습결과 저장하기
juhpark
2025. 1. 16. 23:31
학습을 끝까지 마친 경우, word, word_set, ws_rel_model 세개의 collection의 study_cnt 값을 1 증가시킨다.
mongo 데이터베이스의 경우, $inc 를 사용하여 값을 증가시킬수 있다.
await word_set_model.updateOne(
{_id:req.query.id}, /* 필터링 조건 */
{$inc:{study_cnt:1}} /* study_cnt 값을 1 증가*/
)
update_study_cnt 라우터를 만들어 호출 하면 끝
router.get('/update_study_cnt', async(req, res) => {
console.log(req.session.username)
if(req.session.username == undefined|| req.session.username==""){
res.json({isLogin:false, state:'success', message:''})
}else{
result = await word_set_model.updateOne(
{_id:req.query.id, user_id:req.session.username},
{$inc:{study_cnt:1}})
console.log(result)
result = await ws_rel_model.updateMany(
{word_set_id:req.query.id, user_id:req.session.username},
{$inc:{study_cnt:1}})
console.log(result)
result = await ws_rel_model.find(
{user_id: req.session.username, word_set_id: req.query.id}
).populate('word_id')
console.log(result)
bulkUpdateOps = [];
result.forEach(data=>{
bulkUpdateOps.push({
"updateOne": {
"filter": { "_id": data.word_id._id },
"update": { "$inc": { "study_cnt": 1 } }
}
});
})
if (bulkUpdateOps.length > 0)
result = await word_model.bulkWrite(bulkUpdateOps);
console.log(result)
res.json({isLogin:true, user_id: req.session.username,
state:'success', message:''})
}
})
word_set의 id 값으로 ws_rel_model에 있는 word_id로 word를 조회해야 하기 때문에, 먼저 ws_rel_model에서 데이터를 조회해서 나오 결과로 bulk데이터를 만들고 bulkWrite함수로 한번에 값을 증가시킨다.
mongo db 콘솔에서 데이터를 조회해 보면 word의 study_cnt의 값이 잘 증가하는 것을 볼수 있다.
반응형