MongoDB에 저장 시 삭제나 수정에 용이하게 _id값을 넣어 저장해야한다.
_id값을 넣지 않았을때는 MongoDB에서 알아서 ObjectId()를 무작위 숫자, 문자로 이루어져 넣어준다.
post요청하는 코드를 먼저 보면
app.post('/add', function(req, res){
console.log(req.body);
// 전송에 성공하든 실패하든 뭐라도 보내야한다.
res.send('전송완료')
// 여기에 _id를 추가해준다.
db.collection('post').insertOne( { _id : 1, title : req.body.todo_title, comments: req.body.todo_comments, date : req.body.todo_date} , function(){
console.log('저장완료');
});
});
근데 _id값을 게시물을 올릴 때 마다 1씩 증가하고 싶으면, 총 개시물 갯수를 가져와서 변수로 대입해 처리해야하는데,
그러려면 지금까지 게시물을 발행한 숫자를 기록해두어야한다
mongodb atlas에서 collection을 counter라는 이름으로 하나 더 만들어 보자
그리고 위 코드에서 각 개시물에 _id : (totalPost + 1)을 추가해주면 된다.
이제 totalPost를 수정해줘야하는 방법을 알아보자
db.collection('counter').updateOne( {바꿀 자료 이름} , {어케수정할지} , function(에러, 결과){
console.log('수정완료')
})
updateOne의 기본형식
이를 이용해서 totalPost를 1올려서 수정해보자
app.post('/add', function(req, res){
db.collection('counter').findOne({name : 'totalPost'}, (err, result) => {
var total = result.totalPost;
console.log(result)
db.collection('post').insertOne( {_id: (total + 1), title : req.body.todo_title, comments: req.body.todo_comments, date : req.body.todo_date} , function(){
db.collection('counter').updateOne( {name:'totalPost'} , { $inc: {totalPost:1} } , (err, result) =>{
if (err) return console.log(err)
res.send('전송완료')
})
});
});
});
위 코드처럼 add할때 totalPost를 바꿔주는 식으로 구현해보면된다.
$inc
는 totalPost를 1증가시켜 저장한다는 뜻이고,
$set : {totalPost: 100}
이렇게하면 100으로 바꿔준단 뜻
totalPost가 잘 증가하는 것을 볼 수 있다.