티스토리 뷰
데이터를 저장할때 구분할 수 있어야 하므로 고유의 _id를 달아서 저장해야 함
몽고DB에서 자동으로 id값 부여되는 이유가 데이터 구분하려고!
데이터 여러개면 id값 하나하나 달기 힘드니까 기존 게시물 총 개수에 +1 해주는 기능 만들면 편할듯
DB에 항목 추가할 때마다 자동으로 id값을 1씩 증가시켜서 저장시켜주는게 auto increment
1. 기존 게시물 총 개수 + 1 의 데이터가 들어갈 곳을 fineOne( )을 사용해서 찾기
db.collection('counter').findOne({name:'게시물개수'},function(에러,결과){
console.log(결과.totalPost);
var 총게시물개수 = 결과.totalPost;
});
*컬렉션을 따로 만들어서 저장하는게 편함
2. post 컬렉션에 데이터를 저장해야 하므로 insertOne( ) 사용해서 데이터 저장하기
db.collection('post').insertOne({_id:총개시물개수+1, title:req.body.title, date:req.body.date},function(에러,결과){
console.log('add로 저장완료')
})
3. DB 데이터를 수정하고 싶으면 updateOne( )!
*updateOne 함수엔 파라미터가 세개 필요
db.collection('counter').updateOne({데이터의 이름},{이렇게 수정해주세요},function(에러, 결과){
console.log('수정완료');
});
맨왼쪽엔 {name : '게시물갯수'} 이렇게 데이터를 찾을 수 있는 이름
가운데는 {수정할 값} 입력
근데 수정시 operator라는 문법을 사용해야함 *$ 기호 붙은게 operator라는 문법, 몽고DB에서 가장 어려운 문법
{ $set : { totalPost : 바꿀 값 }} 이렇게 넣으면 값을 바꿀 수 있고
{ $inc : { totalPost : 기존 값에 더해줄 값 }} 이렇게 넣으면 원하는 값을 더해줄 수 있음 *우리가 원하는 것
db.collection('counter').uqdateOne({name:'게시물갯수'},{$inc:{totalPost:1},function(에러, 결과){
console.log('수정완료')
});
만약 counter 콜렉션의 totalPost라는 데이터를 1씩 증가시키고 싶으면?
app.post('/add', function (req, res) {
db.collection('counter').findOne({name:'게시물갯수'},function(에러, 결과){ //counter에서 원하는 값 찾기
console.log(결과.totalPost)
var 총게시물개수 = 결과.totalPost
db.collection('post').insertOne({_id:총게시물개수+1,title: req.body.title, date: req.body.date}, function (에러, 결과) {
console.log('add로 저장완료')
//counter라는 콜렉션에 있는 totalPost 라는 항목도 post에 데이터 항목이 추가 될때마다 1씩 증가해야됨
//counter에서 name이 게시물갯수인 데이터 중 totalPost의 데이터를 +1 해주세요
db.collection('counter').updateOne({name:'게시물갯수'},{$inc : {totalPost:1}},function(에러, 결과){
if(에러){return console.log(에러)}
res.send('전송완료')
})
});
});
});
총정리
1. 먼저 counter라는 컬렉션에서 findOne( )을 사용하여 게시물 누적 개수를 저장할 곳을 찾아서 변수에 담기
2. 게시물을 저장할 컬렉션에 insertOne( )을 사용하여 데이터 저장하기
3. counter 컬렉션에 updateOne( )을 사용하여 기존 게시물 총개수 + 1 을 업데이트 시키기
'Coding > node.js' 카테고리의 다른 글
npm install 설치시 버전 충돌 오류 (0) | 2023.03.22 |
---|---|
npm ERR! code ERR_SOCKET_TIMEOUT 해결방법 (0) | 2023.03.22 |
[node.js] REST API 서버 만들기 (0) | 2023.03.10 |
[node.js] ejs로 DB에 저장한 데이터 html에 넣기 (0) | 2023.03.02 |
[node.js] REST API **면접 필수 질문 (0) | 2023.02.28 |