MongoDB - 자동 증가 시퀀스: 초보자 가이드

안녕하세요, 미래의 코딩 슈퍼스타! ? 오늘 우리는 MongoDB의 세계로 여행을 떠나 자동 증가 시퀀스에 대해 배우게 될 거예요. 코드를 한 줄도 작성한 적이 없다면 걱정하지 마세요 - 저는 당신의 친절한 안내자가 되겠습니다. 우리는 단계별로 진행하겠습니다. 이 튜토리얼의 끝을 맞아당신이 할 수 있는 것에 놀라게 될 거예요!

Auto-Increment Sequence

자동 증가 시퀀스는 무엇인가요?

먼저 자동 증가 시퀀스가 무엇인지 이해해 보겠습니다. 큰 파티를 준비하고 각 손님에게 독특한 번호를 부여하고 싶은 상상해 보세요. 1에서 시작해 2, 3, 4 등으로 이어갑니다. 데이터베이스에서 자동 증가 시퀀스는 이와 같은 역할을 합니다 - 새로운 레코드에 자동으로 독특하고 증가하는 번호를 부여합니다.

MongoDB는 다른 데이터베이스처럼 내장된 자동 증가 기능을 가지고 있지 않지만, 걱정 마세요! 우리는 우리 자신의 자동 증가 시퀀스를 만드는 방법을 배우게 될 거예요. 마법의 주문을 만드는 마법사처럼 느껴지죠? 멋지죠?

쌍수 컬렉션 사용

자동 증가 시퀀스를 만드는 첫 번째 트릭은 쌍수 컬렉션을 사용하는 것입니다. 이를 특별한 노트북으로 생각해 보세요. 우리는 여기서 번호를 관리합니다.

단계 1: 쌍수 컬렉션 생성

먼저 우리의 특별한 노트북을 만들어야 합니다. MongoDB 용어로는 새로운 컬렉션을 만들어 "counters"라고 합니다.

db.createCollection("counters")

단계 2: 쌍수 문서 추가

이제 특정 시퀀스에 대한 페이지를 노트북에 추가해 보겠습니다. "userId"라고 부르겠습니다.

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

이렇게 하면 counters 컬렉션에 문서를 생성합니다. _id 필드는 "userId"이고, seq는 0입니다.

단계 3: findAndModify를 사용하여 다음 시퀀스 가져오기

이제 마법이 일어나는 부분입니다! findAndModify라는 특별한 MongoDB 연산을 사용하여 시퀀스의 다음 번호를 가져옵니다.

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

return ret.seq;
}

이를 설명하자면:

  • query: { _id: name }는 "userId" 문서를 찾습니다.
  • update: { $inc: { seq: 1 } }seq 값을 1 증가시킵니다.
  • new: true는 MongoDB에 업데이트된 문서를 반환하도록 합니다.

단계 4: 컬렉션에서 시퀀스 사용

이제 새로운 사용자를 추가할 때 자동 증가 ID를 사용할 수 있습니다.

db.users.insert(
{
_id: getNextSequence("userId"),
name: "Sarah Connor",
age: 29
}
)

이를 실행할 때마다 새로운 증가된 ID를 사용합니다. 마법이죠?

자바스크립트 함수 생성

이제 기본 개념을 이해했으므로, 자동 증가 요구를 처리하는 더 강력한 자바스크립트 함수를 만들어 보겠습니다.

function getNextSequence(db, sequenceName) {
const sequenceDocument = db.collection("counters").findOneAndUpdate(
{ _id: sequenceName },
{ $inc: { sequence_value: 1 } },
{ returnDocument: "after", upsert: true }
);

return sequenceDocument.sequence_value;
}

이 함수는 몇 가지 멋진 일을 합니다:

  1. findOneAndUpdate를 사용하여 findAndModify의 현대적인 버전을 제공합니다.
  2. upsert: true 옵션은 시퀀스가 존재하지 않으면 생성하도록 합니다.
  3. returnDocument: "after"는 업데이트된 값을 반환하도록 합니다.

자바스크립트 함수 사용

이제 우리의 새로운 함수를 사용해 보겠습니다!

예제 1: 새로운 사용자 생성

const db = client.db("myDatabase");

const userId = await getNextSequence(db, "userId");
const result = await db.collection("users").insertOne({
_id: userId,
name: "John Doe",
email: "[email protected]"
});

console.log(`New user created with id: ${userId}`);

이 예제에서 우리는 자동 증가 ID를 사용하여 새로운 사용자를 생성하고 있습니다. 각 새로운 사용자에게 VIP 번호를 주는 것과 같습니다!

예제 2: 새로운 제품 생성

const productId = await getNextSequence(db, "productId");
const result = await db.collection("products").insertOne({
_id: productId,
name: "Awesome Gadget",
price: 99.99
});

console.log(`New product added with id: ${productId}`);

이렇게 하면 우리는 동일한 함수를 사용하지만 다른 시퀀스 이름을 사용합니다. 여러 번호 시스템을 가지고 있는 파티와 같은 느낌이 듭니다!

보너스: 메서드 표

사용한 메서드의 빠른 참조 표입니다:

메서드 설명
createCollection 새로운 컬렉션 생성
insert 컬렉션에 새로운 문서 추가
findAndModify 문서 찾아서 수정
findOneAndUpdate findAndModify의 현대적인 버전
insertOne 컬렉션에 단일 문서 추가

결론

축하합니다! MongoDB에서 자동 증가 시퀀스를 만들고 사용하는 방법을 배웠습니다. 기억하시죠, 모든 사람이 독특한 번호를 받는 파티 주최자처럼요. 이 기술은 독특하고 증가하는 ID가 필요한 애플리케이션을 만들 때 유용합니다.

연습이 완벽을 만듭니다. 이 개념을 실험해 보지 마세요. 당신이 프로처럼 복잡한 데이터베이스 연산을 수행하는 데 걸리는 시간을 기대해 보세요! 계속 코딩하고, 배우고, 가장 중요한 것은 즐겁게 만들어 보세요! ??‍??‍?

Credits: Image by storyset