MongoDB Atlas에 데이터를 저장하면 임의로 id가 부여된다.
임의로 부여된 id로 데이터를 관리하기에 불편하기 때문에
사용자가 임의로 id를 순차적으로 부여할 수 있다.
database에 id갯수를 카운터 할 collection을 새로 생성한다.
collection의 이름을 counter로 설정하고 다음 데이터를 추가하였다.
/add 페이지에 접속하면(할일 submit수행) 서버로 데이터를 보내는 코드를 다음과 같이 변경하였다.
app.post('/add', function(req, res){
db.collection('counter').findOne({name: '게시물갯수'}, function(error,result){
console.log(result.totalPost)
var totalPostResult = result.totalPost;
db.collection('post').insertOne({ _id: totalPostResult, 날짜:req.body.date, 제목: req.body.title }, function(error,result){
console.log('저장 및 전송 완료');
res.send('전송완료');
});
});
});
먼저 서버의 counter collection에 저장된 게시물 갯수(id로 정함)의 데이터를 불러오기 위해 findOne 메서드를 이용하여 데이터를 불러왔고, 불러온 데이터(result)를 totalPostResult로 선언하여 불러왔다.
이후 데이터를 저장 및 전송하려 할때 id의 정보도 같이 전송되어 저장된다.
만약 위의 코드를 그대로 다시한번 실행하면 새로운 id에 새로운 데이터를 부여받을까?
답은 아니다.
아래와같이 기존 데이터에 저장된 id를 업데이트 해줘야하는데 counter collection에 저장된 데이터가 갱신되지 않았기 때문에 id는 동일하게 부여받고 서버에 동일 id로 전송하니까 업데이트 되지 않는 것이다.
이를 해결하려면?
counter collection의 totalPost값을 증가시키고 그 값으로 id를 부여해 main database에 업로드 하면 된다.
일단 db의 내용을 업데이트 하려면 다음 문장을 사용하면 된다.
하나의 항목을 업데이트 하려면 다음 문장을
db.collection('container').updateOne()
여러개의 항목을 업데이트 하려면 다음 문장을 사용한다.
db.collection('container').updateMany()
실습에서는 다음 문장을 사용하였다.
db.collection('container').updateOne({수정할 데이터를 지정},{수정 값},function(){ })
'DataBase > MongoDB' 카테고리의 다른 글
[MongoDB] Ajax로 mongodb atlas data 삭제하기 (0) | 2021.08.28 |
---|---|
[MongoDB] HTML에 서버에서 데이터 가져오기 (0) | 2021.08.26 |
[MongoDB] MongoDB atlas에 자료 저장하기 (0) | 2021.08.25 |