JSON → Mongoose 스키마

JSON에서 Mongoose 스키마를 즉시 생성. JavaScript·TypeScript 출력, timestamps, 중첩 객체·배열 지원. 무료, 브라우저에서 완전히 실행.

  • 브라우저에서 처리
  • 데이터가 브라우저 밖으로 나가지 않습니다
  • 무료 · 회원가입 불필요
모델과 루트 스키마의 이름입니다. 비워 두면 User를 사용합니다. User나 Order처럼 간단한 이름을 권장합니다.
언어 JavaScript는 CommonJS require와 module.exports를 사용합니다. TypeScript는 import/export를 사용하고 문서 인터페이스를 Schema와 model에 전달합니다.
timestamps 켜면 루트 스키마에 timestamps: true를 추가합니다. TypeScript에는 Date 타입의 createdAt과 updatedAt도 추가합니다. JSON에 같은 키가 있으면 원래 타입을 유지합니다.
필수 필드 켜면 기본 타입, 날짜, Mixed, 기본 타입 배열 필드에 required: true를 추가합니다. 중첩 스키마와 객체 배열은 기존 형태를 유지합니다.
JSON을 중첩 객체와 배열이 있는 사용자 문서로 바꾸고 현재 모델 이름과 옵션으로 즉시 생성합니다.
JSON, 출력과 상태를 지우고 모델 이름과 옵션은 유지합니다. 도구 안의 Ctrl/⌘+L은 모델 이름도 지웁니다.
유효한 JSON을 입력하세요. JSON과 모델 이름을 편집하면 300밀리초 뒤 생성합니다. 세 옵션 그룹은 즉시 반영됩니다. 잘못된 JSON은 출력을 지우고 복사를 비활성화합니다.
Mongoose 스키마 출력
표시된 스키마와 model 내보내기 전체를 복사합니다. 출력이 비어 있으면 복사를 비활성화합니다.

JSON을 입력하거나 예시를 불러와 Mongoose 스키마를 생성하세요.

예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.

타입 매핑

  • null은 어떤 타입에도 들어가므로 추론에서 건너뜁니다. 모든 샘플에서 null인 필드 → mongoose.Schema.Types.Mixed
  • 샘플마다 타입이 다른 필드(숫자와 문자열, 객체와 문자열) → mongoose.Schema.Types.Mixed. ISO 날짜·시간과 다른 문자열이 섞이면 → String
  • 문자열 → String
  • 숫자 → Number
  • 불리언 → Boolean
  • 기본 타입 배열 → [String] / [Number] / [Boolean]
  • 객체 배열 → [subSchema](별도 서브스키마 생성)
  • 중첩 객체 → 별도 스키마 변수를 인라인으로 참조

예시

모델 이름 User, 다음 JSON 입력 시:

{"username": "alice", "age": 28, "tags": ["admin"], "address": {"city": "London"}}

JavaScript 출력(timestamps 켜짐):

const mongoose = require('mongoose');
const { Schema } = mongoose;

const addressSchema = new Schema({
  city: { type: String },
});

const userSchema = new Schema({
  username: { type: String },
  age: { type: Number },
  tags: [String],
  address: addressSchema,
}, { timestamps: true });

module.exports = mongoose.model('User', userSchema);

예시: 모든 샘플로 타입 결정

주문 2건의 루트 배열, 모델 이름 Order, JavaScript, timestamps 끔:

[{"code":1,"note":null,"seller":{"meta":{"x":1}},"buyer":{"meta":{"y":"2"}}},{"code":"A-2","note":"gift","tags":["a",1]}]

출력:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const metaSchema = new Schema({
x: { type: Number },
});

const sellerSchema = new Schema({
meta: metaSchema,
});

const buyerMetaSchema = new Schema({
y: { type: String },
});

const buyerSchema = new Schema({
meta: buyerMetaSchema,
});

const orderSchema = new Schema({
code: { type: mongoose.Schema.Types.Mixed },
note: { type: String },
seller: sellerSchema,
buyer: buyerSchema,
tags: [mongoose.Schema.Types.Mixed],
}, { timestamps: false });

module.exports = mongoose.model('Order', orderSchema);
  • code는 한 건이 1, 다른 건이 “A-2”라서 Mixed입니다. Number면 “A-2”를 거부합니다. note는 null과 “gift”라서 String입니다. tags는 문자열과 숫자가 섞여 요소가 Mixed입니다.
  • 두 meta는 필드가 달라서 두 번째에 부모 키를 앞에 붙입니다(buyerMetaSchema). 같은 키에서 필드와 타입이 같은 객체는 스키마 하나를 함께 씁니다. 앞에 붙여도 이름이 겹치면 번호를 붙입니다.
  • Mixed 필드는 타입 변환과 검증을 하지 않고, 내부를 바꾸면 markModified()를 호출해야 Mongoose가 저장합니다. 데이터가 허용하면 한 타입으로 바꾸세요.

도구 테스트는 생성된 JavaScript를 Mongoose 9.10.3으로 실행해 샘플마다 문서를 만들고, validateSync()가 통과하는지와 모든 필드·값이 남는지 확인합니다(ISO 날짜·시간은 Date가 되어 toISOString() 형태로 비교. 샘플에 없는 배열 필드는 Mongoose 기본값 []가 됩니다).

FAQ

이 도구는 무엇을 생성하나요?

JSON에서 Mongoose 스키마 정의를 생성합니다. 중첩 객체는 별도의 스키마 변수가 되며, 하단에 model export 구문이 포함됩니다.

어떤 언어 모드를 지원하나요?

JavaScript(CommonJS require/module.exports)와 TypeScript(ES module import/export)를 지원합니다. TypeScript 출력은 Mongoose TypeScript 가이드의 작성법에 따라 Document를 상속하지 않는 일반 문서 인터페이스를 Schema<T>와 model<T>에 넘깁니다.

JSON 타입은 Mongoose 타입으로 어떻게 매핑되나요?

string→String, number→Number, boolean→Boolean, 모든 샘플이 null→mongoose.Schema.Types.Mixed, 샘플마다 타입이 다름→Mixed, 기본 타입 배열→[Type], 객체 배열→별도 서브스키마, 중첩 객체→별도 서브스키마.

timestamps 옵션은 어떤 역할을 하나요?

켜면 { timestamps: true }로 스키마가 생성되어 Mongoose가 createdAt, updatedAt 필드(Date 타입)를 자동으로 관리합니다. TypeScript 모드에서는 인터페이스에도 createdAt: Date와 updatedAt: Date가 들어가 hydrated 문서와 .lean() 결과 모두에서 바로 읽을 수 있습니다. JSON 루트에 같은 이름의 키가 있으면 그 키의 타입을 유지합니다.

모든 필드가 required로 생성되나요?

아닙니다. JSON만으로는 필드의 required 여부를 알 수 없으므로 기본적으로 required: true 없이 생성됩니다. '필수 필드'를 켜면 중첩 스키마와 객체 배열을 제외한 모든 필드에 required: true가 붙으므로 실제 사양에 맞게 조정하세요.

데이터가 서버로 전송되나요?

아닙니다. 전체 변환이 브라우저에서 실행됩니다. 데이터는 외부로 전송되지 않습니다.