JSON을 Mongoose 스키마로 변환 — Numio
샘플 JSON 문서로 Mongoose 스키마 정의를 추론해 JSON으로 출력합니다. 필드 타입은 String, Number, Boolean, Date, ObjectId, Mixed 중 하나가 되고, 중첩 객체는 중첩 경로, 객체 배열은 서브도큐먼트 스키마가 됩니다.
Compass나 mongosh에서 복사한 문서로 기존 MongoDB 컬렉션의 스키마를 작성합니다.
JSON
Mongoose Schema
이럴 때 사용하세요
- Compass나 mongosh에서 복사한 문서로 기존 MongoDB 컬렉션의 스키마를 작성합니다.
- 저장할 예정인 샘플 API 페이로드로 Node.js 모델 작성을 시작합니다.
사용 방법
- 문서 하나 또는 문서 배열을 엄격한 JSON으로 붙여 넣습니다. ObjectId와 날짜는 ObjectId()나 ISODate()가 아닌 일반 문자열로 쓰세요.
- 추론된 타입을 확인합니다. 24자 16진수 문자열은 ObjectId, 2024-05-01T08:00:00Z 같은 ISO 8601 문자열은 Date가 됩니다.
- 결과를 new mongoose.Schema({...})에 복사하고 required, default, index, ref 옵션은 직접 추가하세요.
JSON 문서
{
"_id": "64f1c2a9e1b2c3d4e5f60718",
"name": "Ada Lovelace",
"code": "A-1001",
"joinedAt": "2024-05-01T08:00:00Z",
"roles": ["admin", "editor"],
"addresses": [
{ "city": "London", "zip": "NW1" },
{ "city": "Paris", "zip": "75001", "primary": true }
],
"profile": { "bio": "Mathematician", "website": null }
}Mongoose 스키마 (JSON)
{
"_id": {
"type": "ObjectId"
},
"name": {
"type": "String"
},
"code": {
"type": "String"
},
"joinedAt": {
"type": "Date"
},
"roles": {
"type": [
"String"
]
},
"addresses": {
"type": [
{
"city": {
"type": "String"
},
…세부 정보 및 제한 사항
사이트 자체 생성기가 브라우저에서 추론하며 문서는 서버로 전송되지 않습니다.
Date가 되는 것은 ISO 8601 날짜(2024-05-01, 시간과 오프셋은 선택)뿐이므로 "A-1001"이나 "12" 같은 코드는 String으로 남습니다.
객체 배열은 "type": [{ "city": ... }]처럼 모든 항목으로 만든 서브도큐먼트 스키마가 됩니다. 빈 배열은 Array, null은 Mixed가 됩니다.
필수 필드, 기본값, 인덱스, ref는 데이터로 추론할 수 없으며, 샘플에 없는 필드는 스키마에도 없습니다.
FAQ
문서의 JSON 배열도 변환할 수 있나요?
예. 문서가 병합되어 어느 문서에든 나타나는 필드는 모두 스키마에 들어갑니다. 문서마다 타입이 다른 필드는 Mixed가 됩니다.
"String"처럼 타입에 따옴표가 붙는 이유는 무엇인가요?
출력이 JSON이므로 타입 이름이 문자열입니다. JavaScript에서는 전역 생성자 String, Number, Boolean, Date와 Schema.Types.ObjectId, Schema.Types.Mixed를 쓸 수 있습니다.
_id는 어떻게 처리되나요?
다른 필드와 같습니다. 24자 16진수 문자열이면 ObjectId가 됩니다. Mongoose가 자동으로 추가하게 하려면 _id를 지우세요.