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

MongoDB에서 _id 필드 업데이트하는 방법

MongoDB에서 _id 필드는 문서의 고유 식별자 역할을 하기 때문에 일반적인 update() 메서드로는 직접 수정할 수 없습니다. 하지만 새로운 ID를 가진 문서를 저장한 후 기존 문서를 remove() 메서드로 삭제하면 사실상 _id를 변경하는 것과 같은 효과를 얻을 수 있습니다.

1. 샘플 컬렉션 생성하기

먼저 insertOne() 메서드를 사용해 문서가 포함된 컬렉션을 생성해 보겠습니다.

> db.updatingDemo.insertOne({"StudentName":"Robert"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e04dae5150ee0e76c06a04b")
}
> db.updatingDemo.insertOne({"StudentName":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e04dae7150ee0e76c06a04c")
}

2. 전체 문서 조회하기

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

> db.updatingDemo.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e04dae5150ee0e76c06a04b"), "StudentName" : "Robert" }
{ "_id" : ObjectId("5e04dae7150ee0e76c06a04c"), "StudentName" : "Bob" }

3. _id 필드 업데이트하기

이제 findOne() 메서드로 특정 문서를 가져온 뒤, _id 값을 새로 할당하고 해당 문서를 다시 삽입합니다. 그다음 기존 문서를 remove() 메서드로 삭제하면 됩니다.

> myDocument = db.updatingDemo.findOne({"StudentName":"Bob"});
{ "_id" : ObjectId("5e04dae7150ee0e76c06a04c"), "StudentName" : "Bob" }
> myDocument._id = 1001;
1001
> db.updatingDemo.insert(myDocument);
WriteResult({ "nInserted" : 1 })
> db.updatingDemo.remove({_id:ObjectId("5e04dae7150ee0e76c06a04c")});
WriteResult({ "nRemoved" : 1 })

위 과정을 단계별로 살펴보면 다음과 같습니다.

  • findOne(): StudentName이 'Bob'인 문서를 변수에 저장합니다.
  • _id 재할당: 기존 ObjectId 대신 새로운 값(1001)을 _id에 지정합니다.
  • insert(): 새로운 _id를 가진 문서를 컬렉션에 추가합니다.
  • remove(): 이전 ObjectId를 가진 원본 문서를 삭제합니다.

4. 결과 확인하기

변경이 완료되었는지 find() 메서드로 다시 한번 확인해 보겠습니다.

> db.updatingDemo.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e04dae5150ee0e76c06a04b"), "StudentName" : "Robert" }
{ "_id" : 1001, "StudentName" : "Bob" }

출력 결과를 보면 'Bob' 문서의 _id가 기존 ObjectId에서 1001로 성공적으로 변경된 것을 확인할 수 있습니다.

주의사항

이 방식은 실제로 _id를 '수정'하는 것이 아니라 새 문서를 생성하고 기존 문서를 삭제하는 방법입니다. 따라서 운영 환경에서는 데이터 정합성을 위해 트랜잭션을 사용하거나, 애플리케이션 로직에서 참조 무결성을 충분히 검토한 후 적용하는 것이 좋습니다.