티스토리 뷰
id의 필요성
- 특정 게시물을 조회하거나 변조시 해당 데이터의 특정 값으로 찾을 경우, 비슷한 값이나 중복값을 대상으로 할 수도 있습니다.
- 따라서 거의 모든 데이터베이스는 대용량의 데이터에 고유한 id를 부여하여 이를 구분하도록 합니다.
- MongoDB 또한 이런 방법을 사용합니다. 보통 id가 만들어진 순서에 따라 0부터 숫자를 높이는 방식을 사용합니다.
mongodb에서 id를 부여하기
- 보통 총 데이터의 숫자+1로 id를 정하면 쉽게 구현할 수 있습니다.
- 그러나 중간의 데이터를 삭제하면 총 데이터의 숫자도 같이 하락합니다. 만약 이때 새로운 데이터를 저장한다면, 마지막에 저장한 데이터와 새로운 데이터가 동일한 id를 부여받을 수 있습니다.
- 따라서 이를 막기위해, mongodb에서는 새로운 collection을 하나 만들어 id를 관리합니다.
- 예를 들어,counter라는 collection을 만들고 여기에서 다른 collection의 데이터의 id를 부여하는 속성을 만듭니다.
- 이 counter의 속성은 collection에 데이터가 저장된 후에 자동으로 1씩 증가하게 하면 collection의 데이터가 삭제되도 속성값은 변하지 않습니다.
- 따라서 삭제된 데이터를 포함하여 각 데이터만이 갖는 고유한 값을 부여하는 것이 가능합니다.
- 보통 counter의 속성을 먼저 불러오고, 저장할 데이터에 관한 명령어는 counter의 콜백함수에 넣습니다.
app.post('/add', function(요청, 응답){
db.collection('counter').findOne({name : '게시물갯수'}, function(에러, 결과){
var 총게시물갯수 = 결과.totalPost;
db.collection('post').insertOne( { _id : (총게시물갯수 + 1), 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
db.collection('counter').updateOne({속성명: 값},{ $inc: {totalPost:1} },function(에러, 결과){
if(에러){
return console.log(에러)}
응답.send('전송완료');
})
});
});
});
- 그후 updateOne을 사용해 속성의 값을 상승시킵니다.
- updateOne의 두번째 인자에서 { $set : { 속성: 100 } }은 속성값을 100으로 변경,{ $inc : { totalPost : 5 } }은 속성값에 5를 더한다라는 의미입니다.
'개발 > node, express' 카테고리의 다른 글
서버에서 데이터 불러오기 (0) | 2023.05.30 |
---|---|
서버에서 데이터를 삭제하는 법 (0) | 2023.05.09 |
데이터베이스에 데이터 저장하기 (0) | 2023.05.07 |
MongoDB (0) | 2023.05.06 |
github OAuth 인증 구현 (0) | 2023.05.04 |
댓글