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 を削除してください。