일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- CJ UNIT
- 자바
- python
- BFS
- 정보처리산업기사
- 코틀린
- programmers
- 파이썬
- 백준
- 문제풀이
- 프로그래머스
- MYSQL
- 알고리즘
- 코딩교육봉사
- java
- C++
- 시나공
- 데이터베이스
- 소프티어
- 백준알고리즘
- 공부일지
- 1과목
- softeer
- 회고
- kotlin
- SQL
- 백준 알고리즘
- 스프링
- 코딩봉사
- SW봉사
- Today
- Total
JIE0025
[MongoDB] _id를 제거할 수 있을까? 본문
✅ 개요
몽고디비에선, PK의 역할을 하는 _id를 사용한다.
만약 _id를 지정하지 않으면,
자동으로 ObjectId라는 기본 데이터형을 사용해 12bytes로 표현이 되는데
RDBMS에서는 PK의 이름을 지정할 수 있었다.
MongoDB에서도 _id가 아닌, 특정 컬럼을 PK처럼 사용할 수 있는지 궁금해졌다.
_id를 제거할수는 있는걸까?
✅ _id
https://www.mongodb.com/docs/manual/core/document/
공식문서를 확인해보면 _id에 대해 아래와 같이 나와있다.
- 필드 _id는 기본키로 사용하기 위해 예약되어있다.
- 해당 값은 컬렉션에서 고유(UNIQUE)해야하며, 변경할 수 없다.
- 배열 이외의 모든 유형일 수 있다.
- _id에 하위 필드가 포함된 경우, 필드 이름은 ($)로 시작할 수 없다.
이 내용만 보면 _id가 생성된 이후로, 해당 값은 고유하고 변경할 수 없다는 뜻인것 같고
>> _id 필드명을 변경할 수 있다거나, 삭제할 수 있는지의 내용은 보이지 않았다.
너무 당연히 삭제하지 않을거라 생각해서 그런걸까?
1️⃣ Document 삽입 중 필드만 추가
문서를 삽입할때 필드만 추가를 해봤다.
사실 _id가 없으면 default로 ObjectId를 사용한다는것을 위에서 한번 언급했기 때문에
ObjectId로 설정 될것이 예상되었다.
예상과 일치했다.
_id를 명시하지 않으면 기본 타입인 ObjectId가 자동 생성되는것을 확인할 수 있다.
2️⃣ Document에서 update명령어를 통해 _id 제거 시도
먼저 다른 필드에 UNIQUE를 지정해주고, _id를 제거하도록 시도해봤다.
2개 UNIQUE한 인덱스가 생겼다.
_id는 기본적으로 PK의 역할로서 지정되어있어서 처음부터 생성되어있다.
이제 _id 를 제거해보자
db.collection.update(
{ 'columnName': { '$exists': true } }, // 일치하는 컬럼, 필드를 찾기
{ '$unset': { 'columnName': true } }, // $unset 연산자로 제거하기
false, // [Option] Upsert 적용 여부 <Boolean>
true // [Option] 멀티 업데이트(Multi update) 여부 <Boolean>
)
음... 명령어를 쳐봤는데
그대로 잘 남아있다. ㅜㅜ
✅ 결론 : _id는 삭제할 수 없는것 같다 ....
결론적으로 _id를 삭제하거나 다른 컬럼명으로 대체할 수는 없을것 같다.
공식문서를 다시 읽어봤는데
기본키 역할을 하는 _id 필드가 필요하다
라고 되어있어서.....
아무래도 _id를 제거하거나, 다른 컬럼명으로 해당 역할을 대체하는것은 불가능해보인다.
references
- https://www.mongodb.com/docs/manual/core/document/#the-id-field
- https://stackoverflow.com/questions/42381231/how-to-remove-id-in-mongodb-and-replace-with-another-field-as-a-primary-key
- https://webisfree.com/2021-04-11/mongodb-%EC%82%AC%EC%9A%A9-%EC%95%88-%ED%95%98%EB%8A%94-%EC%BB%AC%EB%9F%BC-%ED%95%84%EB%93%9C-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0-deprecated-column
'백엔드 > 데이터베이스' 카테고리의 다른 글
[MongoDB] Collection과 Document를 생성하고 실습해보자 (0) | 2023.05.28 |
---|---|
[NoSQL] MongoDB란? 맥북(M1) 몽고디비, compass 설치 (0) | 2023.05.28 |
[DB] 인덱스의 자료구조 B-TREE, B+TREE (0) | 2023.04.30 |
[DB] SELECT문의 내부동작 기능 (Selection, Projection, Join) (0) | 2023.04.30 |
[MySQL] 데이터 확인시 1000개 제한 해제 (0) | 2023.04.08 |