JSON → Mongoose スキーマ

JSONからMongooseスキーマを即座に生成。JavaScript・TypeScript出力、timestamps、ネストオブジェクト・配列対応。無料、ブラウザ内で処理。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
モデルとルートスキーマの名前です。空欄では User を使います。User や Order などの単純な名前を推奨します。
言語 JavaScript は CommonJS require と module.exports を使います。TypeScript は import/export を使い、ドキュメントのインターフェースを Schema と model に渡します。
timestamps オンではルートスキーマに timestamps: true を付けます。TypeScript は createdAt と updatedAt を Date 型として追加します。JSON に同名キーがある場合は元の型を保持します。
必須フィールド オンではプリミティブ、日付、Mixed、プリミティブ配列に required: true を付けます。ネストしたスキーマとオブジェクト配列は元の形式を保持します。
JSON をネストしたオブジェクトと配列を含むユーザー文書に置き換え、現在のモデル名と設定ですぐに生成します。
JSON、出力、ステータスを消去し、モデル名と設定を保持します。ツール内の Ctrl/⌘+L はモデル名も消去します。
有効な JSON を入力します。JSON とモデル名の編集から 300 ミリ秒後に生成します。3 つの設定は即時反映されます。無効な 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 件目が 1、2 件目が “A-2” なので Mixed です。Number だと “A-2” を拒否します。note は null と “gift” なので String です。tags は文字列と数値が混ざるので要素が Mixed です。
  • 2 つの meta はフィールドが違うので、2 つ目は親のキーを前に付けます(buyerMetaSchema)。同じキーでフィールドと型が同じオブジェクトは 1 つのスキーマを共有します。前置きしても名前が重なるときは番号を付けます。
  • Mixed のフィールドは型変換も検証もされず、中を変更したときは markModified() を呼ばないと Mongoose が保存しません。データが許すなら 1 つの型にしてください。

ツールのテストでは、生成した JavaScript を Mongoose 9.10.3 で実行し、各サンプルからドキュメントを作って validateSync() が通ること、すべてのフィールドと値が残ることを確認しています(ISO 日時は Date になり、toISOString() の形で比較。サンプルにない配列フィールドは Mongoose の既定値 [] になります)。

FAQ

このツールは何を生成しますか?

JSONからMongooseスキーマ定義を生成します。ネストオブジェクトは独立したスキーマ変数になり、末尾にmodelのエクスポート文が含まれます。

対応言語モードは何ですか?

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 が付くので、実際の仕様に合わせて調整してください。

データはサーバーに送信されますか?

いいえ。変換はブラウザ内で実行されます。データは外部に送信されません。