Docs Menu
Docs Home
/
MongoDB 매뉴얼

임의 필드에 대한 고유 제약 조건

이 페이지의 내용

  • 고려 사항

고유한 필드를 샤드 키로 사용할 수 없거나 여러 필드에 대해 고유성을 적용해야 하는 경우 '프록시 컬렉션' 역할을 하는 다른 컬렉션 을 만들어야 합니다. 이 컬렉션에는 원본 문서에 대한 참조(예: ObjectId)와 고유 키가 모두 포함되어야 합니다.

사용자 정보를 저장하는 records 컬렉션을 생각해 보겠습니다. email 필드는 샤드 키가 아니지만 고유성을 보유해야 합니다.

그러면 proxy 컬렉션에 다음이 포함됩니다.

{
"_id" : ObjectId("...")
"parent_id" : "<ID>"
"email" : "<string>"
}

다음 명령어를 사용하여 email 필드에 고유 인덱스을 생성합니다.

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

다음 예시에서는 먼저 대상 필드와 생성된 고유 ID가 포함된 문서를 proxy 컬렉션에 삽입하고자 합니다. 작업이 성공하면 전체 문서를 records 컬렉션에 삽입합니다.

records = db.getSiblingDB('records');
proxy = db.getSiblingDB('proxy');
var primary_id = ObjectId();
proxy.insertOne({
"_id" : primary_id
"email" : "example@example.net"
})
// if: the above operation returns successfully,
// then continue:
records.insertOne({
"_id" : primary_id
"email": "example@example.net"
// additional information...
})

이 방법을 사용하려면 MongoDB가 문서 삽입 시 자동으로 ID를 생성하는 대신 primary_id 필드의 고유 ID를 만들어야 합니다.

여러 필드에 고유성을 적용하려면 각 필드마다 프록시 컬렉션이 필요합니다.

참조:

createIndex() 2} 및 shardCollection의 전체 문서.

  • 애플리케이션은 '프록시' 컬렉션에 문서를 삽입할 때 오류를 파악하고 두 컬렉션의 일관성을 적용해야 합니다.

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

  • 샤딩된 프록시 컬렉션을 이용하여 하나 이상의 필드에 고유성을 적용하려면 고유성을 적용할 모든 필드에 대한 하나의 프록시 컬렉션을 보유해 합니다. 단일 프록시 컬렉션에 여러 개의 고유 인덱스를 만들면 이를 샤딩할 수 없습니다.

다음

MongoDB란 무엇입니까?

이 페이지의 내용