Zum Inhalt springen

JSON in ein Mongoose-Schema umwandeln — Numio

Leitet aus einem JSON-Beispieldokument eine Mongoose-Schemadefinition ab und gibt sie als JSON aus. Felder erhalten String, Number, Boolean, Date, ObjectId oder Mixed; verschachtelte Objekte werden zu verschachtelten Pfaden und Arrays von Objekten zu Subdokument-Schemas.

Ein Schema für eine bestehende MongoDB-Collection aus einem Dokument schreiben, das aus Compass oder mongosh kopiert wurde.

JSON

Mongoose Schema

Wann sie hilft

  • Ein Schema für eine bestehende MongoDB-Collection aus einem Dokument schreiben, das aus Compass oder mongosh kopiert wurde.
  • Ein Node.js-Modell aus einem Beispiel-API-Payload beginnen, das du speichern willst.

Anwendung

  1. Füge ein Dokument als striktes JSON oder ein Array von Dokumenten ein; schreibe ObjectIds und Datumswerte als einfache Strings statt ObjectId() oder ISODate().
  2. Prüfe die abgeleiteten Typen: Hex-Strings mit 24 Zeichen werden zu ObjectId und ISO-8601-Strings wie 2024-05-01T08:00:00Z zu Date.
  3. Kopiere das Ergebnis in new mongoose.Schema({...}) und ergänze die Optionen required, default, index und ref selbst.

JSON-Dokument

{
  "_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-Schema (JSON)

{
  "_id": {
    "type": "ObjectId"
  },
  "name": {
    "type": "String"
  },
  "code": {
    "type": "String"
  },
  "joinedAt": {
    "type": "Date"
  },
  "roles": {
    "type": [
      "String"
    ]
  },
  "addresses": {
    "type": [
      {
        "city": {
          "type": "String"
        },
…

Details und Einschränkungen

Wird im Browser vom eigenen Generator der Seite abgeleitet; das Dokument wird nicht an einen Server gesendet.

Nur ISO-8601-Datumswerte (2024-05-01, optional mit Uhrzeit und Offset) werden als Date typisiert, daher bleiben Codes wie "A-1001" oder "12" String.

Arrays von Objekten werden zu einem Subdokument-Schema, das aus allen Elementen gebildet wird, etwa "type": [{ "city": ... }]. Leere Arrays werden zu Array und null zu Mixed.

Pflichtfelder, Standardwerte, Indizes und Refs lassen sich nicht aus Daten ableiten, und Felder, die in deinem Beispiel fehlen, fehlen auch im Schema.

FAQ

Kann ich ein JSON-Array von Dokumenten umwandeln?

Ja. Die Dokumente werden zusammengeführt, sodass jedes Feld, das in irgendeinem davon vorkommt, im Schema steht. Ein Feld mit unterschiedlichen Typen in verschiedenen Dokumenten wird zu Mixed.

Warum stehen die Typen in Anführungszeichen, etwa "String"?

Die Ausgabe ist JSON, daher sind Typnamen Strings. In JavaScript kannst du die globalen Konstruktoren String, Number, Boolean und Date sowie Schema.Types.ObjectId und Schema.Types.Mixed verwenden.

Wie wird _id behandelt?

Wie jedes andere Feld: Ein Hex-String mit 24 Zeichen wird als ObjectId typisiert. Entferne _id, wenn Mongoose es automatisch hinzufügen soll.

Spezifikationen und Referenzen