본문 바로가기
React

Mongo DB] Auto Increment, 컬럼에 자동으로 증가값 부여하기

by Fastlane 2020. 9. 28.
728x90
반응형

MSSQL - Auto Increment

MSSQL에서는 테이블 생성 시, ID사양 증가값 설정으로 Auto Incremet 처리가 가능하다. 

MongoDB - Auto Increment

MongoDB에서는 어떻게 처리해야 할까. MongoDB는 SQL Database같은 auto-increment를 제공하지 않는다. 

MongoDB에서는 보통 아래와 같은 임의의 _id값이 생성된다.  

 "_id""5eec6b9c206506b18a51b426"

하지만, 1,2,3,4.... 로 자동증가하는 _id값이 필요하다면, counters collection을 활용하여 함수로 얻을 수 있도록 프로그래밍해야한다.  

 

Create counter collection for sequence

Sequence값을 관리하기 위한 Collection을 따로 생성한다. 

이름은 counters로 했다~ 뭐, 각자 좋을대로~

그리고 아래와 같이, 관리하고 싶은 sequence명칭과, 0값을 insert 한다. 

db.counters.insert({ _id: "noticeId", seq: 0 })

Create function to generate auto-increment sequence

그리고 다음과 같이, NextSequence를 가져올 수 있는 함수를 추가한다. 

   getNextSequence: async (name) => {
      let getCountersConn = await _mongo.getConn('catalog', 'sales', 'counters');
      var ret = await getCountersConn.findOneAndUpdate(
         { _id: name },
         {
            $inc: {
               seq: 1
            }
         },
         { returnOriginal: false }
      );
      return ret.value.seq;
   },

 

$inc는 보통 시퀸스 값 증가에 사용하는 제한자이고, returnOriginal:false로 하면 업데이트 된 데이터를 return 받는다. 

 

그리고 아래와 같이 게시판데이터를 insertOne할떄 await mongo.getNextSequence('noticeId')를 호출하면, 

1 증가된 noticeId의 sequence값을 가져올 수 있게 된다. 

 

let insertResult = await notice.insertOne({
    _id: await mongo.getNextSequence('noticeId'),
    title: req.title,
    desc: req.desc,
    date: moment().format()
})

 

728x90
반응형

댓글