AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

샤드 키가 아닌 필드에 고유성 적용

고유한 필드 샤드 키 사용할 수 없거나 여러 필드에 대해 고유성을 시행하다 해야 하는 경우 프록시 컬렉션 역할을 할 다른 컬렉션 만듭니다.

샤딩된 클러스터 고유 인덱스 샤드 키 에 있거나 샤드 키 접두사로 포함하는 경우에만 샤드 간에 고유 제약 조건을 적용합니다. 프록시 컬렉션 컬렉션 원본 문서 에 대한 참조와 고유 키를 모두 포함하며 애플리케이션 프록시 컬렉션 에 먼저 기록합니다.

프록시 컬렉션 사용할 때는 다음 사항을 고려하세요.

  • 애플리케이션 프록시 컬렉션 에 문서를 삽입할 때 오류를 포착해야 합니다. 둘 중 하나의 삽입이 실패할 경우 컬렉션이 분기되지 않도록 트랜잭션 에서 두 컬렉션에 모두 기록합니다.

  • 프록시 컬렉션에 샤딩이 필요한 경우 고유성을 적용할 단일 필드를 샤딩해야 합니다.

  • 각 필드 자체 프록시 컬렉션 필요합니다. 샤딩된 프록시 컬렉션을 사용하여 둘 이상의 필드 에 고유성을 시행하다 하려면 모든 필드 에 대해 하나의 프록시 컬렉션 있어야 합니다. 단일 프록시 컬렉션 에 여러 개의 고유 인덱스를 만드는 경우 프록시 컬렉션 샤드 할 수 없습니다.

  • 이 접근 방식을 사용하려면 MongoDB 문서 삽입 시 자동으로 값을 생성하도록 하여 두 문서가 동일한 _id을 주식 하는 대신 애플리케이션 에서 _id 값을 생성해야 합니다.

샤딩된 컬렉션의 고유 인덱스에 적용 전체 제약 조건 설정하다 는 샤드 클러스터의 고유성 유지를 참조하세요.

  • 고유한 제약 조건이 필요하지만 샤드 키 의 일부가 될 수 없는 필드 를 식별합니다.

  • 필드 의 고유성 제약 조건을 위반하는 기존 문서가 없는지 확인합니다.

  • mongosh를 mongos 인스턴스 에 연결합니다.

사용자 정보를 저장하는 records 컬렉션 생각해 보겠습니다. email 필드 샤드 키 아니지만 고유해야 합니다. proxy 컬렉션 다음 필드가 포함되어 있습니다.

{ "_id" : ObjectId("..."), "email" : "<string>"}
1

proxy 컬렉션 의 email 필드 에 고유 인덱스 생성합니다.

db.proxy.createIndex( { "email" : 1 }, { unique : true } )
email_1
2

대상 필드 와 생성된 고유 ID 포함된 문서 proxy 컬렉션 에 삽입한 다음 전체 문서 records 컬렉션 에 삽입합니다. 트랜잭션 에서 두 삽입을 모두 실행하여 MongoDB 두 쓰기를 모두 적용하거나 둘 다 적용하지 않도록 합니다.

// Start a sessionsession = db.getMongo().startSession( { readPreference: { mode: "primary" } } );proxy = session.getDatabase( db.getName() ).proxy;records = session.getDatabase( db.getName() ).records; var primary_id = ObjectId(); // Start a transactionsession.startTransaction( { readConcern: { level: "local" }, writeConcern: { w: "majority" } } ); // Operations inside the transactiontry { proxy.insertOne( { "_id" : primary_id, "email" : "example@example.net" } ); records.insertOne( { "_id" : primary_id, "email" : "example@example.net", // additional information... } );} catch (error) { // A duplicate email value fails the proxy insert and // cancels the transaction session.abortTransaction(); throw error;}// Commit the transaction using write concern set at transaction startsession.commitTransaction();session.endSession();

email 값이 proxy 컬렉션 에 이미 존재하는 경우, 고유 인덱스 삽입을 거부하고 트랜잭션 이 중단되므로 records에 문서 추가되지 않습니다.