> For the complete documentation index, see [llms.txt](https://triplexlab.gitbook.io/vanilla-js/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://triplexlab.gitbook.io/vanilla-js/rest-api/undefined.md).

# 게시물마다 번호를 달아 저장하기

### &#x20;**\_id를 달아서 저장합시다.**

MongoDB에 데이터를 저장할 땐 \_id라는 값을 꼭 넣으셔야합니다. 그래야 삭제도 쉽고 나중에 수정도 쉬우니까요. 아까 모르고 안넣으셨다고요? 괜찮습니다.\
안넣으시면 MongoDB에서 알아서 ObjectId() 어쩌구 이런걸 만들어서 아이디를 강제로 부여해줍니다.  \
근데 너무 복잡하죠? 그러니까 애초에 저장할 때 직접 \_id를 달아봅시다.

전에 작성했던 post 요청 처리하는 서버코드를 다시 살펴봅시다.

```javascript
app.post('/add', function(요청, 응답){
  응답.send('전송완료');
  db.collection('post').insertOne( { _id : 1, 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
    console.log('저장완료')
  });
});
```

insertOne 함수 안에 \_id : 1 이라는 항목을 요로케 써주시면… 번호달아서 저장하기 끝입니다.

그런데 1이라고 하드코딩을 해버렸네요. 글 쓸 때마다 항상 \_id : 1일 수는 없죠?\
2번째 글이면 \_id: 2, \
3번째 글이면 \_id : 3이 되어야 합니다.

다른 DB에선 \_id를 자동으로 1증가시켜서 추가해주세요\~ 이런 기능이 있는데 (Auto Increment라고 합니다)\
MongoDB는 그런거 없습니다. \
그래서 여러분이 직접 **지금까지 몇번 게시물을 발행했는지**를 기록하셔야합니다.\
그리고 방금 코드를 이렇게 바꾸면 되겠죠?&#x20;

```javascript
app.post('/add', function(요청, 응답){
  응답.send('전송완료');
  db.collection('post').insertOne( { _id : 지금까지 발행한 게시물 갯수 + 1, 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
    console.log('저장완료')
  });
});
```

\_id : 1 이라고 하드코딩 하지 말고 위 코드 처럼 바꾸면\
글을 하나 발행할 때마다 유니크한 \_id가 부여되겠군요.

### **지금까지 몇번 게시물을 발행했는지 기록합시다.** &#x20;

여러분 mongodb atlas 홈페이지 들어가셔서 대시보드에서 collection을 하나 더 만들도록 합시다.&#x20;

![](https://3843212257-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqOIAZJ26UmArDUcS8p%2F-M4NINLZdpHOe-aWCPAl%2F-M4NMrLrtxxqOPMy-xjC%2F%EC%A0%9C%EB%AA%A9-%EC%97%86%EC%9D%8C1.png?alt=media\&token=56e149aa-3d8f-4b5e-be42-4d804483c8aa)

좌측에 여러분 todoapp이라는 데이터베이스에 + 버튼을 누르시면 collection(파일)을 하나 더 생성 가능합니다.&#x20;

counter라는 이름을 가진 collection을 생성합시다.&#x20;

![](https://3843212257-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqOIAZJ26UmArDUcS8p%2F-M4NINLZdpHOe-aWCPAl%2F-M4NMwKd1Hytf47Em_mt%2F%EC%A0%9C%EB%AA%A9-%EC%97%86%EC%9D%8C2-1.png?alt=media\&token=ea39b960-e5cd-4856-9ca2-96ee12daaeed)

&#x20;**방금 새로만든 counter라는 콜렉션에 데이터를 하나 강제로 집어넣어봅시다.**

![](https://3843212257-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqOIAZJ26UmArDUcS8p%2F-M4NINLZdpHOe-aWCPAl%2F-M4NN2ZE76o1serbKwXi%2F%EC%A0%9C%EB%AA%A9-%EC%97%86%EC%9D%8C3-2-768x357.png?alt=media\&token=e54b4eba-200a-4783-a155-582235c5c1d3)

우측에 보면 Insert Document 흰버튼을 누르시면 강제로 항목을 하나 추가 가능합니다. \
그리고 이렇게 그대로 작성한 후 Insert 버튼을 누르면 되겠습니다. \
(totalPost 라는 항목은 Int32로 셋팅하는거 잊지마세요)

이게 바로 여러분이 **지금까지 몇번 게시물을 발행했는지를** 기록할 공간입니다. \
totalPost라는 곳에 저장할 것입니다. \
지금은 아무 게시물도 발행되지 않았다고 생각하고 초기값은 0이라고 합시다.&#x20;

### **POST 요청 처리하는 코드를 수정해야겠군요**

그리고 방금 코드를 이렇게 바꾸면 되겠죠?&#x20;

```javascript
app.post('/add', function(요청, 응답){
  
  // counter라는 콜렉션에서 totalPost라는 총 게시물 갯수 숫자를 가져와서
  var 총게시물갯수 = 여기에 저장함
  // 그 다음에 밑에 코드 실행
  db.collection('post').insertOne( { _id : (총게시물갯수 + 1), 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
    console.log('저장완료')
    응답.send('전송완료');
  });
});
```

```javascript
app.post('/add', function(요청, 응답){
  db.collection('counter').findOne({name : '게시물갯수'}, function(에러, 결과){
    var 총게시물갯수 = 결과.totalPost;
    db.collection('post').insertOne( { _id : (총게시물갯수 + 1), 제목 : 요청.body.title, 날짜 : 요청.body.date } , function(){
      console.log('저장완료')
      //counter라는 콜렉션에 있는 totalPost 라는 항목도 1씩 증가시켜야함 (수정);
      db.collection('counter').updateOne({name:'게시물갯수'},{ $inc : {totalPost:1} },function(err, data){
        if(err) {return console.log(err)}
      });
    });
  });
});
```

1번줄 : 누군가 /add 경로로 post 요청을 하면

2번줄 : counter라는 콜렉션에서 총게시물갯수 저장해놓은 문서를 찾습니다. 그 찾은 문서는 **결과**라는 변수에 담겨옵니다.

3번줄 : 결과.totalPost하면 총게시물 갯수가 뿅하고 출현합니다. 그걸 **var 총게시물갯수** 변수에 저장해서 사용합니다.

4번줄 : 이제 글저장 시간입니다. post라는 콜렉션에 insertOne을 이용해 게시물을 추가합니다. 추가할 때 \_id를 var **총게시물갯수**를 이용해 제대로 부여해줍니다.&#x20;

6번줄 : 성공했다고 응답.send로 브라우저에게 글자를 보냅니다. 응답.render, 응답.redirect 이런 것도 이용가능합니다.&#x20;
