Was dieses Werkzeug tut
Aus einer JSON-Probe wird ein Mongoose-Schema, ein const je Objekt, und am Ende ein Modell.
{ "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);
Kinder zuerst: Schemas sind Laufzeitwerte, eines muss da sein, bevor ein anderes es benutzt. Ein Array von Dokumenten an der Wurzel beschreibt sein erstes Element — das ist die Form des Datensatzes, die Liste ist ohnehin schon die Sammlung.
required an einem Array braucht Hilfe
Mongoose gibt jedem Array die Vorgabe []. Ein Feld { type: [String], required: true } validiert daher auch ohne den Schlüssel: die Vorgabe erfüllt die Pflicht. An Mongoose 9 geprüft:
| Dokument | required: true | required: true, default: undefined |
|---|---|---|
{ tags: ["a"] } | geht durch | geht durch |
{ tags: [] } | geht durch | geht durch |
{} | geht durch | scheitert |
Die erste Spalte sagt nicht, was das Wort verspricht. Array-Felder werden deshalb mit default: undefined neben required: true ausgegeben, damit ein fehlendes Array der Fehler ist, als der es auftritt. Ein leeres Array geht weiterhin durch, und das zu Recht: es ist ein Wert.
Verschachtelte Objekte werden Subdokumente, mit eigener _id
address oben ist ein Subdokument, und Mongoose gibt ihm eine eigene _id:
{ _id: ObjectId("…"), address: { city: "Paris", _id: ObjectId("…") } }
Das ist Mongooses Vorgabe, keine Zutat von hier. Sind Ihnen diese inneren Kennungen im Weg, entfernt new mongoose.Schema({ … }, { _id: false }) sie — eine Entscheidung über Ihre Dokumente, und darum Ihre.
Ein MongoDB-Export ist nicht das JSON, das Sie wollen
mongoexport schreibt erweitertes JSON:
{ "_id": { "$oid": "65f1c…" }, "created": { "$date": "2026-01-01T00:00:00Z" } }
Das sind Objekte: der Generator macht Subdokument-Schemas daraus, und _id endet als Subdokument mit eigener _id, was sicher nicht gemeint war. Ersetzen Sie sie von Hand durch mongoose.Schema.Types.ObjectId und Date. Ein Schlüssel namens $oid bedeutet MongoDB etwas und einem strukturellen Leser nichts.
Mixed ist die Stelle, an der die Probe schwieg
null, ein unbekannter Wert, ein leeres Array und ein gemischtes Array ergeben alle mongoose.Schema.Types.Mixed. Ein Mixed-Feld wird nicht validiert und — gut zu wissen — seine Änderungen werden nicht automatisch verfolgt: Sie müssen markModified rufen. Engen Sie es ein, sobald Sie wissen, was dort hingehört.
Datenschutz ab Werk
Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.