Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB 컬렉션의 기본 키(_id)를 변경하는 방법

MongoDB에서 기본 키(Primary Key) 역할을 하는 _id 필드는 한 번 생성되면 직접 수정할 수 없습니다. 따라서 기본 키를 변경하려면 기존 문서를 삭제한 뒤 새로운 _id가 자동으로 부여되도록 다시 삽입하는 방식을 사용해야 합니다. 이 작업은 forEach() 메서드와 함께 삭제(remove) 작업을 조합하여 손쉽게 처리할 수 있습니다.

1. 샘플 컬렉션 생성

먼저 실습에 사용할 컬렉션을 만들고 문서를 하나 삽입해 보겠습니다.

> db.demo41.insertOne({"StudentName":"Carol"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e25ce4acfb11e5c34d898e3")
}

2. find()로 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션 내 모든 문서를 확인할 수 있습니다.

> db.demo41.find();

위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{ "_id" : ObjectId("5e25ce4acfb11e5c34d898e3"), "StudentName" : "Carol" }

3. 기본 키를 변경하는 쿼리 실행하기

이제 MongoDB 컬렉션의 기본 키를 변경하는 핵심 쿼리입니다. 각 문서를 순회하면서 기존 _id 값을 제거한 후 문서를 다시 삽입하고, 이전 _id를 가진 원본 문서를 삭제합니다.

> var next = db.demo41.find()
>
> next.forEach(function(s) {
...     var prevId = s._id;
...     delete s._id;
...     db.demo41.insert(s);
...     db.demo41.remove(prevId);
... });

이 코드의 동작 순서는 다음과 같습니다.

  • find()로 컬렉션의 모든 문서를 가져옵니다.
  • forEach()로 각 문서를 하나씩 순회합니다.
  • 기존 _id 값을 변수에 저장한 뒤 문서 객체에서 삭제합니다.
  • _id가 없는 상태로 문서를 다시 삽입하면 MongoDB가 새로운 ObjectId를 자동 생성합니다.
  • 마지막으로 이전 _id를 가진 원본 문서를 삭제합니다.

4. 변경된 기본 키 확인하기

작업이 완료되었으니 다시 한번 find() 메서드로 기본 키를 확인해 보겠습니다.

> db.demo41.find();

실행 결과, 아래와 같이 새로운 기본 키가 부여된 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5e25cee5cfb11e5c34d898e4"), "StudentName" : "Carol" }

주의 사항

이 방식은 문서를 삭제 후 재삽입하는 구조이므로, 운영 환경에서 대량의 데이터를 처리할 때는 성능 저하나 데이터 정합성 문제가 발생할 수 있습니다. 또한 해당 컬렉션을 참조하는 외래 키나 인덱스가 있다면 함께 업데이트해야 하므로, 작업 전 반드시 백업을 권장합니다.