학습을 끝까지 마친 경우, 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의 값이 잘 증가하는 것을 볼수 있다.
'Programming > 온라인 영어암기 단어장 개발' 카테고리의 다른 글
온라인 영어 암기 단어장 만들기(8) - 학습화면 만들기 (0) | 2025.01.16 |
---|---|
온라인 영어 암기 단어장 만들기(7) - 단어장 저장하기 (0) | 2025.01.13 |
온라인 영어 암기 단어장 만들기(6) - Google Translate API를 활용한 단어 뜻 찾아오기 (0) | 2025.01.11 |
온라인 영어 암기 단어장 만들기(5) - 단어입력화면 만들기 (1) | 2025.01.04 |
온라인 영어 암기 단어장 만들기(4) - 데이터베이스 설계하기 (0) | 2024.12.03 |