스타디/데이터베이스

MongoDB AUTO_INCREMENT 사용하기

bread-gee 2019. 4. 9. 10:16

Mysql을 쓸 땐,

자동으로 컬럼의 숫자 값 증가하게 하기 위해 auto_increment 를 유용하게 사용했다.

CREATE TABLE users (
	id INT NOT NULL AUTO_INCREMENT,
	name CHAR(30) NOT NULL,
	PRIMARY KEY (id)
);

 

 

MongoDB에는 같은 기능이 없다.

그래서 함수를 만들어 따로 구현해주어야 한다.

...더보기

MongoDB에서 auto-increment를 제공하지 않는 이유 같은 이유

MongoDB에서 _id 필드나 다른 어떤 필드를 위한 auto-increment 패턴을 사용할 필요가 없다.
auto-increment 패턴을 사용하면 데이터베이스에 많은 documents가 있을 경우 확장성이 떨어진다.
기본값인 ObjectId 가 _id로 사용하기에 더 이상적이다.

 

 

 

※ 요약
마지막으로 사용된 번호를 추적하기 위해 분리된 컬렉션을 이용한다.
'_id' 필드는 시퀀스 이름을 포함하고, seq 필드는 시퀀스의 마지막 값을 포함한다.

 

Step 1. counters 컬렉션을 만들고 초기값으로 userid를 할당한다.

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

 

 

Step 2. 시퀀스의 이름을 받는 getNextSequence 함수를 만든다. 

함수는 자동으로 seq 값을 증가시키고, 새 값을 반환하기 위해 findAndModify()  메서드를 사용한다.

function getNextSequence(name) {
  var ret = db.counters.findAndModify(
    {
      query: { _id: name },
      update: { $inc: { seq: 1 } },
      new: true
    }
  );
  return ret.seq;
}

 

 

Step 3. 위 두가지를 실행했다면, 앞으로 insert()를 할때 getNextSequence() 함수를 사용한다.

db.users.insert(
  {
    _id: getNextSequence("userid"),
    name: "Sarah C."
  }
)

db.users.insert(
  {
    _id: getNextSequence("userid"),
    name: "Bob D."
  }
)

 

 

 

※ 참고 사이트

https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/