스타디/데이터베이스
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/