100% ローカル — データがブラウザの外に出ることはありません

JSONをMongooseに変換|そのまま置けるモデルファイルに

JSONのサンプルをMongooseのスキーマに変換します。オブジェクトごとにスキーマが一つ、値のある項目は必須になるので、モデルとしてそのまま書き出して使えます。

高速 プライベート Cookieゼロ

JSON 入力

Mongoose 出力

このツールの動作

JSON の標本が Mongoose のスキーマになります。オブジェクトごとに const が一つ、最後に模型が一つです。

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
import mongoose from 'mongoose';

const AddressSchema = new mongoose.Schema({
  city: { type: String, required: true },
});

const RootSchema = new mongoose.Schema({
  id: { type: Number, required: true },
  name: { type: String, required: true },
  address: { type: AddressSchema, required: true },
});

export default mongoose.model('Root', RootSchema);

子が先です。スキーマは実行時の値であり、別のものから使われる前に存在している必要があります。根が文書の配列なら、その最初の要素を写します。記録の形はそれであり、並びのほうは、集まりがすでにそうなっているものだからです。

配列の required には支えが要る

Mongoose はどの配列にも既定値 [] を与えます。したがって { type: [String], required: true } と書いた項目は、鍵が無くても通ります。既定値が要求を満たすからです。Mongoose 9 で確かめました。

文書required: truerequired: true, default: undefined
{ tags: ["a"] }通る通る
{ tags: [] }通る通る
{}通る失敗する

左の列は、言葉が約束することを言っていません。そこで配列の項目は required: true の隣に default: undefined を添えて出します。無い配列が、名乗るとおりの誤りになるようにです。空の配列は今までどおり通ります。それが正しく、空の配列も値だからです。

入れ子のオブジェクトは副文書になり、自分の _id を持つ

上の address は副文書で、Mongoose はそれに自分の _id を与えます。

{ _id: ObjectId("…"), address: { city: "Paris", _id: ObjectId("…") } }

これは Mongoose の既定であって、ここで足したものではありません。内側の識別子が雑音なら、new mongoose.Schema({ … }, { _id: false }) が取り除きます。あなたの文書についての判断なので、あなたに残しています。

MongoDB の書き出しは、欲しい JSON ではない

mongoexport は拡張 JSON を書きます。

{ "_id": { "$oid": "65f1c…" }, "created": { "$date": "2026-01-01T00:00:00Z" } }

これらはオブジェクトなので、生成器は副文書のスキーマにします。_id は自分の _id を持つ副文書になり、意図とはまるで違うものになります。手で mongoose.Schema.Types.ObjectId と Date に置き換えてください。$oid という鍵は MongoDB には意味があり、構造だけを読む者には何の意味もありません。

Mixed は、標本が黙った場所

null、型の分からない値、空の配列、型の混ざった配列は、いずれも mongoose.Schema.Types.Mixed になります。Mixed の項目は検査されず、そして知っておくとよいことに、その変更は自動では追われません。markModified を呼ぶ必要があります。そこに何が入るか分かった時点で、狭めてください。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜ配列の項目に `default: undefined` が付くのですか。
それが無いと、配列の `required: true` は何もしないからです。Mongoose はどの配列にも既定値 `[]` を与えるので、鍵の無い文書もそのまま通ります。既定値が要求を満たしてしまうのです。`default: undefined` を足すと、「必須」という言葉どおりに振る舞います。Mongoose 9 で確かめました。当て推量ではありません。
入れ子のオブジェクトに `_id` が増えました。どこから来たのですか。
Mongoose からです。項目の型として使った入れ子のスキーマは副文書であり、副文書は既定で自分の `_id` を持ちます。要らなければ、スキーマの選択肢に `{ _id: false }` を渡してください。既定の姿を黙って変えれば、あなたの文書の見た目まで変わるので、そのままにしています。
MongoDB の書き出しを貼ったら `$oid` の項目が出ました。これで合っていますか。
標本の中身がそうだったということです。`mongoexport` の文書は拡張 JSON で書かれます——`{"_id": {"$oid": "…"}}`、`{"$date": "…"}`——ので、生成器はオブジェクトを見て副文書にします。`mongoose.Schema.Types.ObjectId` と `Date` に置き換えてください。見たことのない鍵の裏にある約束事を、道具は知りようがありません。

関連ツール