[MongoDB] 데이터를 JSON으로 한 번에 업데이트 하는 방법
✅ 불편함
MongoDB는 Compass라는 GUI 프로그램을 제공한다.
그런데 GUI를 제공한다 하더라도 JSON의 DOCUMENTS가 수 천, 수 만 개가 되면 도저히 엄두가 안 난다.
다양한 보기 방식을 지원해서 CSV 형태의 테이블로 보면 수정이 편할 것 같지만, 엑셀 프로그램 같이 후다닥 할 수 있는 것이 아니다.
한 셀마다 마우스로 일일이 update 버튼을 눌러줘야 수정이 가능하기 때문에, 수정해야 할 데이터가 수 십 개가 넘어가면 어떤 방식으로 수정하든, GUI를 이용하는 것은 고통스럽다.
✅ JSON 내려 받아 수정하기
여러 방법이 있지만, 그 중에서 좌측 상단 메뉴에서 EXPORT DATA를 통해 JSON 파일로 내보내고, VSCODE를 이용하여 빠르게 수정한 뒤 다시 merge 하는 방법을 사용해보겠다.
데이터 JSON 또는 CSV로 내보내기
EXPORT DATA - Export the full collection 클릭
내보내기 방식 선택. 본인은 CSV보단 JSON이 훨씬 빠르게 수정 가능했던 것 같다.
JSON Format 옵션은 별도로 건들지 않으면 Default Extended JSON로 설정되어 있다.
우리가 흔히 알고 있는 JSON의 Key-Value 형태로 만들어 주는 것은 Rexlaxed Extended JSON이라 이것이 읽기 편하지만 Javascript와 JSON 표준에서 표현 가능한 정수는 최대값이 2^53-1까지만 지원된다. (9,007,199,254,740,992)
그래서 이것보다 큰 수를 다루는 경우 데이터 무결성을 보장할 수 없다는 경고가 뜬다. 그래서 몽고디비의 데이터 입출력 형태를 조금 넣은 것이 디폴트 방식이니, 특별한 경우가 아니면 그냥 사용하는 것이 좋겠다.
Conoical Extended JSON은 몽고 DB로 다시 데이터를 가져올 때 사용하는 방식이라고 하는데, 일반적인 선에서는 그냥 디폴트로 놓는 게 나은 것 같다.
// ✅ Relaxed Extended JSON (가장 기본 방식)
// 보기는 쉬운데 큰 수에서 데이터 무결성 보장 못함
// 데이터 몽고디비로 다시 가져올 때 충돌날 수 있음
{
"fortyTwo": 42,
"oneHalf": 0.5,
"bignumber": 5000000000
}
// ✅ Canonical Extended JSON (몽고디비의 데이터 구조를 완전히 적용)
// 보기 어려움
{
"fortyTwo": { "$numberInt": "42" },
"oneHalf": { "$numberDouble": "0.5" },
"bignumber": { "$numberLong": "5000000000" }
}
// ✅ Default Extended JSON (Canoical 방식과 거의 유사하지만, 더 보기 편하게 수정)
// 정말 중요한 것 말고는 좀 더 보기 쉽게 바꾼 형태
{
"fortyTwo": 42,
"oneHalf": 0.5,
"bignumber": { "$numberLong": "5000000000" }
}
VSCODE로 수정하기
VSCode나 Notepad 등으로 빠르게 수정하고 저장한다.
MongoDB로 JSON Import 하기
이 부분이 핵심이다.
먼저 Mongo Import를 설치해야 한다.
https://www.mongodb.com/try/download/database-tools
위 링크에서 MongoDB Command Line Database Tools Download를 OS 버전에 맞게 설치한다.
Windows는 .zip 압축파일 보다는 .msi 설치파일로 설치하는 게 빠를 것 같다.
그 다음 잘 설치가 되었는지 터미널에서 확인해본다.
mongoimport --version
JSON 파일이 바탕화면에 있다고 가정하겠다.
바탕화면에서 바로 터미널을 연다.
그리고 아래의 명령어를 수정해서 mongoDB로 import 한다.
아래 명령어는 Windows PowerShell용이다.
& "C:\Program Files\MongoDB\Tools\100\bin\mongoimport.exe" `
--uri="mongodb+srv://<DB접근자아이디>:<DB접근자암호>@<클러스터주소>/<DB이름>" `
--collection=<콜렉션이름> `
--file="<JSON파일경로>" `
--jsonArray `
--mode=merge
본인은 지금 포스팅하느라 JSON 파일을 열어놔서 0개의 document가 업로드 되었다고 나오지만, 실제로는 잘 된다.
위에서 복사한 명령어는 merge하는 방식이다.
만약 데이터가 커뮤니티 형태이든 자동화된 데이터베이스든, 계속해서 CRUD 되고 있는 것이라면 내가 수정하는 그 순간에도 데이터가 변경되어 내가 가진 데이터와 몽고DB의 데이터에 차이가 발생할 텐데 어떻게 합치는지 정하는 방식을 merge 방식으로 했다는 것이고 이게 추천된다.
데이터에 차이가 있다면 MongoDB에 있는 기존 데이터는 그대로 두고, 내가 수정한, 즉 차이가 있는 데이터만 업데이트 해주는 것이다. 즉 덮어씌우기라고 보면 된다.
명령어의 마지막 mode 부분을 수정해주면 여러가지 옵션으로 데이터를 import 할 수 있다.
data import option
- merge : (🔹추천) 기존 데이터 유지하면서 수정된 필드만 업데이트
- 기존 데이터의 _id는 변경되지 않음.
- _id가 없는 데이터는 변경할 수 없음.
- upsert : _id 기준으로 업데이트 또는 삽입(없으면 새로 추가)
- _id까지 같이 써줘야 함. 그 _id가 있으면 그 데이터를 수정하는 것이고, 없으면 _id를 포함한 필드를 새로 만들어버림.
- _id는 몽고디비에서 필드를 만들 때 자동으로 생성하는 고유값임.
- insert : (기본값) _id 중복 시 오류 발생, 새로운 데이터만 추가
- 몽고디비에 없는 값만 추가하는 것. 수정(덮어쓰기)는 불가능.
- delete : JSON에 있는 데이터를 몽고DB에서 삭제
- _id까지 같이 명시해주어야 함. _id를 기준으로 찾아서 특정 데이터를 삭제함.
'Programing > Server' 카테고리의 다른 글
초심자 MongoDB 시작하기 (0) | 2025.03.04 |
---|---|
MongoDB란? (vs Supabase와의 비교) (0) | 2025.02.11 |
Node.js로 구축한 백엔드 서버를 Supabase에 연결시키기 (0) | 2024.08.27 |
supabase signUp() 메서드로 회원가입 시 users 테이블에 자동으로 레코드 생성하기 (0) | 2024.07.21 |
supabase DB Tables postgreSQL로 한 번에 생성하기 (0) | 2024.07.21 |
댓글