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

MongoDB에서 시드 문자열로 ObjectId를 생성할 수 있나요? 올바른 대안 방법

MongoDB의 ObjectId는 시드(seed) 문자열을 입력값으로 받지 않습니다. 따라서 특정 문자열을 기반으로 고유 식별자를 만들고 싶다면, ObjectId를 사용하는 대신 _id 필드에 원하는 문자열 값을 직접 지정해야 합니다.

이번 글에서는 문자열 값을 _id로 사용하여 컬렉션을 생성하고 문서를 삽입하는 방법을 단계별로 살펴보겠습니다.

1. 문자열 _id 값으로 문서 삽입하기

먼저 demo667이라는 컬렉션을 만들고, 문자열 값을 가진 _id를 포함한 문서들을 삽입해 보겠습니다.

> db.demo667.insertOne({_id:"Chris"});
{ "acknowledged" : true, "insertedId" : "Chris" }
> db.demo667.insertOne({_id:"David"});
{ "acknowledged" : true, "insertedId" : "David" }

중복 키 오류 발생 사례

_id는 컬렉션 내에서 반드시 고유해야 합니다. 이미 존재하는 값으로 다시 삽입을 시도하면 아래와 같이 E11000 duplicate key error가 발생합니다.

> db.demo667.insertOne({_id:"Chris"});
2020-04-23T22:01:23.268+0530 E QUERY [js] WriteError: E11000 duplicate key error collection: test.demo667 index: _id_ dup key: { : "Chris" } :
WriteError({
    "index" : 0,
    "code" : 11000,
    "errmsg" : "E11000 duplicate key error collection: test.demo667 index: _id_ dup key: {   : \"Chris\" }",
    "op" : {
       "_id" : "Chris"
    }
})

이 오류는 해당 문자열 값이 이미 _id_ 인덱스에 존재하기 때문입니다. 이처럼 중복된 _id 삽입 시도는 항상 거부되므로, 애플리케이션 코드에서 이러한 상황을 적절히 처리해 주는 것이 좋습니다.

나머지 서로 다른 문자열 값들은 정상적으로 삽입됩니다.

> db.demo667.insertOne({_id:"Bob"});
{ "acknowledged" : true, "insertedId" : "Bob" }
> db.demo667.insertOne({_id:"Mike"});
{ "acknowledged" : true, "insertedId" : "Mike" }

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

삽입된 모든 문서를 확인하려면 find() 메서드를 사용하면 됩니다.

> db.demo667.find();

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

{ "_id" : "Chris" }
{ "_id" : "David" }
{ "_id" : "Bob" }
{ "_id" : "Mike" }

정리

  • ObjectId는 시드 문자열을 허용하지 않으므로, 문자열 기반 식별자가 필요하면 _id에 직접 문자열을 지정해야 합니다.
  • _id 값은 컬렉션 내에서 유일해야 하며, 중복 시 E11000 오류가 발생합니다.
  • 자동 생성되는 ObjectId 대신 의미 있는 문자열 ID를 사용하면 데이터 조회 및 관리가 더 직관적일 수 있습니다.