1. MongoDB 유니크 인덱스
쿼리를 효율적으로 사용하기 위해 MongoDB 는 인덱스를 제공한다.
MongoDB 에서 인덱스 유형은 매우 다양하다.
1-1. MongoDB 인덱스 유형
유형 | 설명 |
단일 필드 인덱스 | 특정 필드에 대한 인덱스 |
복합 인덱스 | 여러 필드를 조합한 인덱스 |
해시 인덱스 | 해시된 값으로 인덱스 |
텍스트 인덱스 | 텍스트 검색을 위한 인덱스 |
2dsphere 인덱스 | 지리공간 데이터에 대한 인덱스 |
유일 인덱스 | 유일한 값만 허용 - 로컬서버 기준에 한정, 샤드서버로 데이터가 분산되는 경우에는 어플리케이션에서 처리 |
2. MongoDB 테스트 버전
유형 | 버전 | 구성 |
mongosh | 2.2.10 | |
mongodb | 7.0.12 | Config : 1개, 포트 20000 Route : 1개, 포트 20001 Shard1 : 1개, 포트 30001 Shard2 : 1개, 포트 40001 |
3. 유니크 인덱스 생성
3-1. 유니크 인덱스 생성
인덱스 생성 시 unique 옵션을 true 로 지정한다.
Number 필드를 Unique 인덱스로 생성했다.
[direct: mongos] indexDB> db.uniqueIndex.createIndex( { "Number" : 1 }, { unique: true } )
Number_1
4. 유니크 인덱스 적재
4-1. 단일 필드 인덱스 테스트
도큐먼트 적재 시 인덱스의 필드를 지정하지 않더라도 NULL 값으로 지정된다.
[direct: mongos] indexDB> db.uniqueIndex.insert( { "Name" : "Hong" } )
DeprecationWarning: Collection.insert() is deprecated. Use insertOne, insertMany, or bulkWrite.
{
acknowledged: true,
insertedIds: { '0': ObjectId('66b9cf8d23b56ce2101b157d') }
}
[direct: mongos] indexDB> db.uniqueIndex.insert( { "Name" : "Park" } )
Uncaught:
MongoBulkWriteError: E11000 duplicate key error collection: indexDB.uniqueIndex index: Number_1 dup key: { Number: null }
Result: BulkWriteResult {
insertedCount: 0,
matchedCount: 0,
modifiedCount: 0,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {},
insertedIds: {}
}
Write Errors: [
WriteError {
err: {
index: 0,
code: 11000,
errmsg: 'E11000 duplicate key error collection: indexDB.uniqueIndex index: Number_1 dup key: { Number: null }',
errInfo: undefined,
op: { Name: 'Park', _id: ObjectId('66b9cf9c23b56ce2101b157e') }
}
}
]
[direct: mongos] indexDB> db.uniqueIndex.insert( { "Name" : "Park" , Number : null } )
Uncaught:
MongoBulkWriteError: E11000 duplicate key error collection: indexDB.uniqueIndex index: Number_1 dup key: { Number: null }
Result: BulkWriteResult {
insertedCount: 0,
matchedCount: 0,
modifiedCount: 0,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {},
insertedIds: {}
}
Write Errors: [
WriteError {
err: {
index: 0,
code: 11000,
errmsg: 'E11000 duplicate key error collection: indexDB.uniqueIndex index: Number_1 dup key: { Number: null }',
errInfo: undefined,
op: {
Name: 'Park',
Number: null,
_id: ObjectId('66b9cfaf23b56ce2101b157f')
}
}
}
]
4-2. 서브 도큐먼트 배열 유니크
서브 도큐먼트 배열의 유니크는 중복된 값을 체크하지 않는다.
[direct: mongos] indexDB> db.subuniqueIndex.createIndex( { "Number.ASC" : 1 } , { unique : true } )
Number.ASC_1
[direct: mongos] indexDB> db.subuniqueIndex.insert( { "Name" : "Park",
"Number" : [ { "ASC" : 1 } , { "ASC" : 1 } ] } )
{
acknowledged: true,
insertedIds: { '0': ObjectId('66b9d10a23b56ce2101b1580') }
}
'Database > MongoDB 실습' 카테고리의 다른 글
[MongoDB] TTL 인덱스 생성과 도큐먼트 적재 (0) | 2024.08.13 |
---|---|
[MongoDB] Partial 인덱스 생성과 주의사항 (0) | 2024.08.12 |
[MongoDB] 전문검색 인덱스 사용법과 주의사항 (0) | 2024.08.06 |
[MongoDB] 멀티 키 인덱스 범위조건 사용하는 방법 (0) | 2024.08.06 |
[MongoDB] 샤딩 청크 샤드서버 할당하는 방법 (0) | 2024.07.31 |