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의 값이 잘 증가하는 것을 볼수 있다.