{"id":51776,"date":"2022-06-27T08:03:51","date_gmt":"2022-06-27T07:03:51","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=51776&#038;post_type=knowledgebase&#038;preview_id=51776"},"modified":"2025-10-01T20:18:35","modified_gmt":"2025-10-01T19:18:35","slug":"was-ist-mongodb","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/","title":{"rendered":"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank"},"content":{"rendered":"<p>In diesem Lernprogramm lernst du die Datenbank MongoDB kennen. Du erf\u00e4hrst, wie du die Software installierst, Daten manipulierst und die Datenentwurfstechniken auf deine eigenen Anwendungen anwendest.<\/p>\n<p>Alle Beispiele wurden mit MongoDB 5 entwickelt, aber die meisten funktionieren auch mit fr\u00fcheren oder neueren Versionen. Der Code kann direkt in eine Client-Anwendung oder in die MongoDB-Shell (mongo oder mongosh) eingegeben werden, um die Datenbank abzufragen und zu aktualisieren.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Was ist MongoDB?<\/h2>\n<p>MongoDB ist eine <a href=\"https:\/\/kinsta.com\/de\/blog\/open-source-database\/\">quelloffene NoSQL-Datenbank<\/a>. NoSQL bedeutet, dass die Datenbank keine relationalen Tabellen wie eine <a href=\"https:\/\/kinsta.com\/de\/blog\/mongodb-vs-mysql\/\">traditionelle SQL-Datenbank<\/a> verwendet.<\/p>\n<p>Es gibt eine Reihe von NoSQL-Datenbanktypen, aber MongoDB speichert Daten in JavaScript-\u00e4hnlichen Objekten, die als <em>Dokumente<\/em> bezeichnet werden und deren Inhalt wie folgt aussieht:<\/p>\n<pre><code class=\"language-bash\">{\n  _id: \"123\",\n  name: \"Craig\"\n}<\/code><\/pre>\n\n<p>Obwohl MongoDB zum Synonym f\u00fcr das JavaScript-basierte Framework <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-node-js\/\">Node.js<\/a> geworden ist, gibt es offizielle <a href=\"https:\/\/www.mongodb.com\/docs\/drivers\/\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB-Datenbanktreiber<\/a> f\u00fcr die meisten Frameworks, Sprachen und Laufzeiten, darunter <a href=\"https:\/\/www.mongodb.com\/docs\/drivers\/node\/current\/\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a>, <a href=\"https:\/\/kinsta.com\/de\/blog\/php-vs-python\/\">PHP und Python<\/a>. Du kannst dich auch f\u00fcr Bibliotheken wie <a href=\"https:\/\/www.npmjs.com\/package\/mongoose\" target=\"_blank\" rel=\"noopener noreferrer\">Mongoose<\/a> entscheiden, die eine h\u00f6here Abstraktionsebene oder ORM-Funktionen (Object Relational Mapping) bieten.<\/p>\n<p>Im Gegensatz zu SQL-Tabellen gibt es in MongoDB keine strukturellen Beschr\u00e4nkungen f\u00fcr die Daten, die du speichern kannst. Datenschemata werden nicht erzwungen: Du kannst speichern, was du willst, wo du willst. Das macht MongoDB ideal f\u00fcr organische &#8211; <em>oder unordentliche<\/em> &#8211; Datenstrukturen.<\/p>\n<p>Nimm ein Adressbuch f\u00fcr Kontakte. Personen k\u00f6nnen oft mehrere Telefonnummern haben. Du k\u00f6nntest drei Telefonfelder in einer SQL-Tabelle definieren, aber das w\u00e4ren f\u00fcr manche Kontakte zu viele und f\u00fcr andere zu wenige. Letztendlich ben\u00f6tigst du eine separate Telefontabelle, was die Komplexit\u00e4t noch erh\u00f6ht.<\/p>\n<p>In MongoDB k\u00f6nnen diese Telefonnummern als unbegrenztes Array von Objekten im selben Dokument definiert werden:<\/p>\n<pre><code class=\"language-bash\">{\n  _id: \"123\",\n  name: \"Craig\",\n  telephone: [\n    { home: \"0123456789\" },\n    { work: \"9876543210\" },\n    { cell: \"3141592654\" }\n  ]\n}<\/code><\/pre>\n<p>Beachte, dass MongoDB eine \u00e4hnliche JavaScript-Objektnotation f\u00fcr Datenaktualisierungen und -abfragen verwendet, was dich vor einige Herausforderungen stellen kann, wenn du an SQL gew\u00f6hnt bist.<\/p>\n<h2>Elemente von MongoDB<\/h2>\n<p>Bevor wir weitermachen, lass uns einen Blick darauf werfen, was MongoDB ausmacht. Dieses Vokabular werden wir in diesem Artikel verwenden.<\/p>\n<ul>\n<li><strong>Dokument:<\/strong> Ein einzelnes Objekt in einem Datenspeicher, vergleichbar mit einem Datensatz oder einer Zeile in einer SQL-Datenbanktabelle.<\/li>\n<li><strong>Feld:<\/strong> Ein einzelnes Datenelement innerhalb eines Dokuments, z. B. ein Name oder eine Telefonnummer, analog zu einem SQL-Feld oder einer Tabellenspalte.<\/li>\n<li><strong>Sammlung:<\/strong> Ein Satz \u00e4hnlicher Dokumente, analog zu einer SQL-Tabelle. Du k\u00f6nntest zwar alle deine Dokumente in einer einzigen Sammlung zusammenfassen, aber es ist meist praktischer, sie nach bestimmten Typen zu gruppieren. In einem Kontaktadressbuch k\u00f6nntest du eine Sammlung f\u00fcr Personen und eine f\u00fcr Unternehmen anlegen.<\/li>\n<li><strong>Datenbank:<\/strong> Eine Sammlung von zusammenh\u00e4ngenden Daten, identisch mit einer SQL-Datenbank.<\/li>\n<li><strong>Schema:<\/strong> Ein Schema definiert Datenstrukturen. In SQL-Datenbanken musst du Tabellendefinitionen mit zugeh\u00f6rigen Feldern und Typen festlegen, bevor du Daten speichern kannst. In MongoDB ist dies nicht notwendig, obwohl es m\u00f6glich ist, ein Schema zu erstellen, das Dokumente validiert, bevor sie einer Sammlung hinzugef\u00fcgt werden k\u00f6nnen.<\/li>\n<li><strong>Index:<\/strong> Eine Datenstruktur, die zur Verbesserung der Abfrageleistung verwendet wird und mit SQL-Indizes identisch ist.<\/li>\n<li><strong>Prim\u00e4rschl\u00fcssel:<\/strong> Ein eindeutiger Bezeichner f\u00fcr jedes Dokument. MongoDB f\u00fcgt automatisch ein eindeutiges und indiziertes _id-Feld zu jedem Dokument in einer Sammlung hinzu.<\/li>\n<li><strong>Denormalisierung:<\/strong> In SQL-Datenbanken ist die &#8222;Normalisierung&#8220; eine Technik, um Daten zu organisieren und Duplikate zu vermeiden. In MongoDB wird die &#8222;Denormalisierung&#8220; gef\u00f6rdert. Du wiederholst aktiv Daten und ein einziges Dokument k\u00f6nnte alle ben\u00f6tigten Informationen enthalten.<\/li>\n<li><strong>Joins:<\/strong> SQL bietet einen JOIN-Operator, mit dem Daten aus mehreren normalisierten Tabellen in einer einzigen Abfrage abgerufen werden k\u00f6nnen. Joining war in MongoDB bis Version 3.6 nicht m\u00f6glich und die Einschr\u00e4nkungen bleiben bestehen. Dies ist ein weiterer Grund, warum Daten in eigenst\u00e4ndige Dokumente denormalisiert werden sollten.<\/li>\n<li><strong>Transaktionen:<\/strong> Wenn eine Aktualisierung zwei oder mehr Werte in einem einzigen Dokument \u00e4ndert, stellt MongoDB sicher, dass sie alle erfolgreich sind oder fehlschlagen. Aktualisierungen von zwei oder mehr Dokumenten m\u00fcssen in einer Transaktion verpackt werden. MongoDB unterst\u00fctzt Transaktionen seit Version 4.0, aber daf\u00fcr ist ein Multi-Server-Replikat oder ein Sharded-Cluster erforderlich. Die Beispielinstallationen unten verwenden einen einzelnen Server, so dass Transaktionen nicht m\u00f6glich sind.<\/li>\n<\/ul>\n<h2>So installierst du MongoDB<\/h2>\n<p>Du hast drei M\u00f6glichkeiten, MongoDB auf deinem lokalen Rechner zu nutzen. Wir f\u00fchren dich durch jede davon.<\/p>\n<h3>1. Docker verwenden (empfohlen)<\/h3>\n<p><a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker<\/a> ist ein Software-Management-Tool, mit dem du MongoDB oder jede andere Anwendung in wenigen Minuten installieren, konfigurieren und ausf\u00fchren kannst.<\/p>\n<p><a href=\"https:\/\/dockerwebdev.com\/tutorials\/install-docker\/\" target=\"_blank\" rel=\"noopener noreferrer\">Installiere Docker und Docker Compose<\/a> und erstelle dann einen Projektordner mit einer einzigen Datei namens docker-compose.yml, die den folgenden Inhalt enth\u00e4lt (beachte, dass die Einr\u00fcckungen wichtig sind):<\/p>\n<pre><code class=\"language-bash\">version: '3'\n\nservices:\n\n  mongodb:\n    image: mongo:5\n    environment:\n      - MONGO_INITDB_ROOT_USERNAME=root\n      - MONGO_INITDB_ROOT_PASSWORD=pass\n      - MONGO_INITDB_DATABASE=mongodemo\n    container_name: mongodb\n    volumes:\n      - dbdata:\/data\/db\n    ports:\n      - \"27017:27017\"\n\n  adminer:\n    image: dehy\/adminer\n    container_name: adminer\n    depends_on:\n      - mongodb\n    ports:\n      - \"8080:80\"\n\nvolumes:\n  dbdata:<\/code><\/pre>\n<p>Rufe den Ordner \u00fcber die Kommandozeile auf und f\u00fchre ihn aus:<\/p>\n<pre><code class=\"language-bash\">docker-compose up<\/code><\/pre>\n<p>Die neueste Version von MongoDB 5 wird heruntergeladen und gestartet. Das dauert beim ersten Start ein paar Minuten, aber die folgenden Durchl\u00e4ufe sind deutlich schneller.<\/p>\n<p>Beachte das:<\/p>\n<ul>\n<li>Es wird ein MongoDB-Administratorkonto mit der ID &#8222;root&#8220; und dem Passwort &#8222;pass&#8220; definiert.<\/li>\n<li>Die Daten werden zwischen den Neustarts in einem Docker-Volume namens dbdata gespeichert.<\/li>\n<li>Der <a href=\"https:\/\/kinsta.com\/de\/blog\/adminer\/\">Adminer Datenbank-Client<\/a> wird ebenfalls bereitgestellt.<\/li>\n<\/ul>\n<p>Du kannst jeden MongoDB-Datenbankclient verwenden, um dich mit der ID &#8222;root&#8220; und dem Passwort &#8222;pass&#8220; mit localhost:27017 zu verbinden. Alternativ kannst du auf den Adminer unter <a href=\"http:\/\/localhost:8080\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/<\/a> zugreifen und dich mit den folgenden Anmeldedaten anmelden:<\/p>\n<ul>\n<li><strong>System:<\/strong> MongoDB (alpha)<\/li>\n<li><strong>Server:<\/strong> host.docker.internal<\/li>\n<li><strong>Benutzername:<\/strong> root<\/li>\n<li><strong>Passwort:<\/strong> pass<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Der Server host.docker.internal funktioniert auf Mac- und Windows-Ger\u00e4ten, auf denen Docker Desktop l\u00e4uft. Linux-Benutzer sollten die Netzwerk-IP-Adresse des Ger\u00e4ts verwenden, nicht localhost (Adminer l\u00f6st diese in seinen eigenen Docker-Container auf).<\/p>\n<\/aside>\n\n<figure id=\"attachment_123495\" aria-describedby=\"caption-attachment-123495\" style=\"width: 900px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-123495 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/05\/adminer-login.png\" alt=\"Adminer-Anmeldung\" width=\"900\" height=\"455\"><figcaption id=\"caption-attachment-123495\" class=\"wp-caption-text\">Adminer-Anmeldung<\/figcaption><\/figure>\n<p>Mit Adminer kannst du Sammlungen und Dokumente einsehen. Beachte jedoch, dass Sammlungen als &#8222;Tabellen&#8220; bezeichnet werden:<\/p>\n<figure id=\"attachment_123494\" aria-describedby=\"caption-attachment-123494\" style=\"width: 1102px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-123494 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/05\/adminer-view.png\" alt=\"Adminer Sammlungsansicht\" width=\"1102\" height=\"577\"><figcaption id=\"caption-attachment-123494\" class=\"wp-caption-text\">Adminer Sammlungsansicht<\/figcaption><\/figure>\n<p>Um Befehle auszuf\u00fchren, kannst du die MongoDB Shell (<code>mongosh<\/code>) oder die alte <code>mongo<\/code> Befehlszeilenumgebung REPL (Read Eval Print Loop) verwenden.<\/p>\n<p>Greife auf die Bash-Shell des Docker-MongoDB-Containers zu:<\/p>\n<pre><code class=\"language-bash\">docker exec -it mongodb bash<\/code><\/pre>\n<p>Starte dann die MongoDB-Shell mit deiner ID und deinem Passwort:<\/p>\n<pre><code class=\"language-bash\">mongosh -u root -p pass<\/code><\/pre>\n<p>(Wenn du es vorziehst, kannst du auch den alten Befehl <code>mongo<\/code> verwenden)<\/p>\n<p>Du kannst dann MongoDB-Befehle wie die folgenden eingeben:<\/p>\n<ul>\n<li><strong><code>show dbs;<\/code><\/strong> &#8211; Alle Datenbanken anzeigen<\/li>\n<li><strong><code>use mongodemo;<\/code><\/strong> &#8211; Eine bestimmte Datenbank verwenden<\/li>\n<li><strong><code>show collections;<\/code><\/strong> &#8211; Sammlungen in einer Datenbank auflisten<\/li>\n<li><strong><code>db.person.find();<\/code><\/strong> &#8211; Alle Dokumente in einer Sammlung auflisten<\/li>\n<li><strong><code>exit;<\/code><\/strong> &#8211; Beenden\/Schlie\u00dfen der Shell<\/li>\n<\/ul>\n<p>Beende MongoDB, indem du den folgenden Befehl im Projektverzeichnis ausf\u00fchrst:<\/p>\n<pre><code class=\"language-bash\">docker-compose down<\/code><\/pre>\n<h3>2. Einen Cloud-Anbieter verwenden (keine Installation)<\/h3>\n<p>Du kannst eine gehostete MongoDB-Instanz verwenden, sodass du nichts lokal installieren musst. Eine Internetverbindung ist unerl\u00e4sslich und die Geschwindigkeit der Antwort h\u00e4ngt vom Anbieter und deiner Bandbreite ab. Die meisten Anbieter verlangen eine monatliche Geb\u00fchr und\/oder eine Geb\u00fchr f\u00fcr die Nutzung von Megabytes.<\/p>\n<p>Der Hoster stellt dir normalerweise Informationen zur Verf\u00fcgung, damit du die Datenbank mit der MongoDB-Client-Software aus der Ferne verwalten kannst.<\/p>\n<h3>3. MongoDB vor Ort installieren<\/h3>\n<p>MongoDB kann auf Linux, Windows oder Mac OS installiert und konfiguriert werden. Es sind zwei Editionen verf\u00fcgbar:<\/p>\n<ol>\n<li>Eine kommerzielle Enterprise Edition<\/li>\n<li>Eine quelloffene Community Edition (in diesem Tutorial verwendet)<\/li>\n<\/ol>\n<p>Auf der <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/installation\/\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB-Installationsseite<\/a> findest du Anleitungen f\u00fcr verschiedene Betriebssysteme. Generell gilt:<\/p>\n<ul>\n<li>Die Linux-Editionen werden mit einem Paketmanager wie <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-ubuntu\/\" target=\"_blank\" rel=\"noopener noreferrer\">apt unter Ubuntu<\/a> installiert<\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-os-x\/\" target=\"_blank\" rel=\"noopener noreferrer\">Mac OS Editionen werden mit brew installiert<\/a><\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-windows\/\" target=\"_blank\" rel=\"noopener noreferrer\">Windows-Editionen werden mit einem .msi-Installationsprogramm installiert<\/a><\/li>\n<\/ul>\n<p>Befolge die Anweisungen sorgf\u00e4ltig, damit deine Installation erfolgreich ist!<\/p>\n<h2>Wie du auf deine MongoDB-Datenbank zugreifst<\/h2>\n<p>Jetzt, wo deine MongoDB-Datenbank installiert ist, ist es an der Zeit zu lernen, wie du sie verwalten kannst. Wir erkl\u00e4ren dir, was du tun musst, um auf deine Datenbank zuzugreifen und mit ihr zu arbeiten.<\/p>\n<h3>1. Installiere einen MongoDB-Client<\/h3>\n<p>Um Datenbanken zu verwalten, ist eine MongoDB-Client-Anwendung erforderlich. Wenn du eine Cloud- oder lokale Installation verwendest, empfehlen wir dir, <a href=\"https:\/\/www.mongodb.com\/docs\/mongodb-shell\/install\/\" target=\"_blank\" rel=\"noopener noreferrer\">die Kommandozeilenanwendung Mongosh MongoDB Shell zu installieren<\/a>.<\/p>\n<p><a href=\"https:\/\/www.adminer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Adminer<\/a> ist ein webbasierter Datenbank-Client, der MongoDB unterst\u00fctzt, allerdings ist er derzeit auf die \u00dcberpr\u00fcfung von Sammlungen beschr\u00e4nkt. Adminer kann als einzelnes PHP-Skript heruntergeladen werden, ist aber bereits eingerichtet, wenn du die <a href=\"https:\/\/docs.google.com\/document\/d\/13hLswY74cFDedN7DoUWbIshf6K7wRI4myCvKcpvNIZ0\/edit#heading=h.jv0yfv8fhy7q\" target=\"_blank\" rel=\"noopener noreferrer\">Docker-Installation<\/a> nutzt oder <a href=\"https:\/\/kinsta.com\/docs\/devkinsta\/database-manager\/\">DevKinsta installiert<\/a> hast.<\/p>\n<p>Eine GUI-Client-Anwendung bietet eine bessere Schnittstelle zum Aktualisieren und Pr\u00fcfen von Daten. Es stehen mehrere Optionen zur Verf\u00fcgung, darunter das kostenlose und plattform\u00fcbergreifende <a href=\"https:\/\/www.mongodb.com\/products\/compass\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB Compass<\/a>:<\/p>\n<figure id=\"attachment_123493\" aria-describedby=\"caption-attachment-123493\" style=\"width: 1315px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-123493\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/05\/compass.png\" alt=\"MongoDB Compass\" width=\"1315\" height=\"932\"><figcaption id=\"caption-attachment-123493\" class=\"wp-caption-text\">MongoDB Compass<\/figcaption><\/figure>\n<p><a href=\"https:\/\/studio3t.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Studio 3T<\/a>, ein weiterer GUI-Anw\u00e4rter, bietet eine kommerzielle Anwendung mit eingeschr\u00e4nkter Funktionalit\u00e4t zum Nulltarif an:<\/p>\n<figure id=\"attachment_123492\" aria-describedby=\"caption-attachment-123492\" style=\"width: 1266px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-123492\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/05\/studio3t.png\" alt=\"Studio 3T\" width=\"1266\" height=\"905\"><figcaption id=\"caption-attachment-123492\" class=\"wp-caption-text\">Studio 3T<\/figcaption><\/figure>\n<p>Du kannst mit einem dieser Tools auf deine MongoDB-Datenbank zugreifen, indem du eines der folgenden Tools verwendest:<\/p>\n<ol>\n<li>Den Netzwerknamen, die URL oder die IP-Adresse des Rechners (<strong>localhost <\/strong>f\u00fcr eine lokale Installation).<\/li>\n<li>Den MongoDB-Port (standardm\u00e4\u00dfig <strong>27017<\/strong>).<\/li>\n<li>Eine <strong>Benutzer-ID <\/strong>und ein <strong>Passwort<\/strong>. Normalerweise wird bei der Installation ein Root-Benutzer festgelegt.<\/li>\n<\/ol>\n<h3>2. Datenbankzugriffsberechtigungen festlegen und speichern<\/h3>\n<p>Der Root-Administrator hat uneingeschr\u00e4nkten Zugriff auf alle Datenbanken. In der Regel solltest du einen benutzerdefinierten Benutzer mit bestimmten Berechtigungen verwenden, um den Zugriff einzuschr\u00e4nken und <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-sicherheit\/\">die Sicherheit zu erh\u00f6hen<\/a>.<\/p>\n<p>Der folgende Befehl erstellt zum Beispiel einen Benutzer namens <strong>myuser <\/strong>mit dem Passwort <strong>mypass<\/strong>, der Lese- und Schreibrechte f\u00fcr die Datenbank <strong>mydb <\/strong>hat:<\/p>\n<pre><code class=\"language-bash\">use mydb;\n\ndb.createUser({\n  user: \"myuser\",\n  pwd: \"mypass\",\n  roles: [\n    { role: \"readWrite\", db: \"mydb\" }\n  ]\n});<\/code><\/pre>\n<h2>Wie man neue Dokumente in MongoDB einf\u00fcgt<\/h2>\n<p>Bevor du dein erstes Dokument einf\u00fcgst, musst du weder eine Datenbank noch eine Sammlung definieren. Wechsle mit einem beliebigen MongoDB-Client einfach zu einer Datenbank namens mongodemo:<\/p>\n<pre><code class=\"language-bash\">use mongodemo;<\/code><\/pre>\n<p>Dann f\u00fcgst du ein einzelnes Dokument in eine neue Personensammlung ein:<\/p>\n<pre><code class=\"language-bash\">db.person.insertOne(\n  {\n    name: 'Abdul',\n    company: 'Alpha Inc',\n    telephone: [\n      { home: '0123456789' },\n      { work: '9876543210' }\n    ]\n  }\n);<\/code><\/pre>\n<p>Zeige das Dokument an, indem du eine Abfrage ausf\u00fchrst, die alle Ergebnisse aus der Personensammlung zur\u00fcckgibt:<\/p>\n<pre><code class=\"language-bash\">db.person.find({});<\/code><\/pre>\n<p>Das Ergebnis sieht dann etwa so aus:<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n  name: 'Abdul',\n  company: 'Alpha Inc',\n  telephone: [\n    { home: '0123456789' },\n    { work: '9876543210' }\n  ]\n}<\/code><\/pre>\n<h3>Wie man mehrere Dokumente einf\u00fcgt<\/h3>\n<p>Du kannst mehrere Dokumente in eine Sammlung einf\u00fcgen, indem du ein Array an <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.insertMany\/\" target=\"_blank\" rel=\"noopener noreferrer\">insertMany()<\/a> \u00fcbergibst. Der folgende Code erstellt zus\u00e4tzliche Personendokumente und eine neue Unternehmenssammlung:<\/p>\n<pre><code class=\"language-bash\">db.person.insertMany([\n  {\n    name: 'Brian',\n    company: 'Beta Inc'\n  },\n  {\n    name: 'Claire',\n    company: 'Gamma Inc',\n    telephone: [\n      { cell: '3141592654' }\n    ]\n  },\n  {\n    name: 'Dawn',\n    company: 'Alpha Inc'\n  },\n  {\n    name: 'Esther',\n    company: 'Beta Inc',\n    telephone: [\n      { home: '001122334455' }\n    ]\n  },\n  {\n    name: 'George',\n    company: 'Gamma Inc'\n  },\n  {\n    name: 'Henry',\n    company: 'Alpha Inc',\n    telephone: [\n      { work: '012301230123' },\n      { cell: '161803398875' }\n    ]\n  },\n]);\n\ndb.company.insertMany([\n  {\n    name: 'Alpha Inc',\n    base: 'US'\n  },\n  {\n    name: 'Beta Inc',\n    base: 'US'\n  },\n  {\n    name: 'Gamma Inc',\n    base: 'GB'\n  },\n]);<\/code><\/pre>\n<h3>Woher kommt die _id?<\/h3>\n<p>MongoDB weist jedem Dokument in einer Sammlung automatisch eine _id zu. Dies ist eine ObjectID &#8211; ein BSON (Binary Javascript Object Notation) Wert, der Folgendes enth\u00e4lt:<\/p>\n<ul>\n<li>Die Unix-Epoche in Sekunden zum Zeitpunkt der Erstellung (4 Byte)<\/li>\n<li>Aa 5-Byte-Maschinen-\/Prozess-ID<\/li>\n<li>Ein 3-Byte-Z\u00e4hler, der mit einem Zufallswert beginnt<\/li>\n<\/ul>\n<p>Dies ist der Prim\u00e4rschl\u00fcssel des Dokuments. Der 24-stellige hexadezimale Wert ist garantiert eindeutig f\u00fcr alle Dokumente in der Datenbank und kann nach dem Einf\u00fcgen nicht mehr ge\u00e4ndert werden.<\/p>\n<p>MongoDB bietet auch eine <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/ObjectId.getTimestamp\/\" target=\"_blank\" rel=\"noopener noreferrer\">getTimeStamp()-Funktion<\/a>, mit der du das Erstellungsdatum\/die Erstellungszeit des Dokuments abfragen kannst, ohne dass du explizit einen Wert festlegen musst. Alternativ kannst du bei der Erstellung eines Dokuments einen eigenen eindeutigen _id-Wert definieren.<\/p>\n<h3>Denormalisierung der Daten<\/h3>\n<p>Die oben eingef\u00fcgten Datens\u00e4tze setzen das Unternehmen jedes Benutzers auf eine Zeichenfolge wie &#8222;Alpha Inc&#8220;. Dies ist in normalisierten SQL-Datenbanken nicht empfehlenswert:<\/p>\n<ul>\n<li>Es ist leicht, einen Fehler zu machen: Ein Benutzer ist der &#8222;Alpha Inc.&#8220; zugeordnet, ein anderer der &#8222;Alpha Inc.&#8220; (zus\u00e4tzlicher Punkt). Sie werden als unterschiedliche Unternehmen behandelt.<\/li>\n<li>Die Aktualisierung eines Firmennamens k\u00f6nnte bedeuten, dass viele Datens\u00e4tze aktualisiert werden m\u00fcssen.<\/li>\n<\/ul>\n<p>Die SQL-L\u00f6sung besteht darin, eine <em>Unternehmenstabelle<\/em> zu erstellen und ein Unternehmen \u00fcber seinen Prim\u00e4rschl\u00fcssel (wahrscheinlich eine ganze Zahl) mit einer Person zu verkn\u00fcpfen. Der Schl\u00fcssel w\u00fcrde unabh\u00e4ngig von \u00c4nderungen des Firmennamens gleich bleiben und die Datenbank kann Regeln zur Gew\u00e4hrleistung der Datenintegrit\u00e4t durchsetzen.<\/p>\n<p>Die Denormalisierung wird in MongoDB gef\u00f6rdert. Du solltest Daten aktiv wiederholen und ein einziges Dokument k\u00f6nnte alle ben\u00f6tigten Informationen enthalten. Das hat mehrere Vorteile:<\/p>\n<ul>\n<li>Dokumente sind in sich geschlossen und leichter zu lesen &#8211; es ist nicht n\u00f6tig, auf andere Sammlungen zu verweisen.<\/li>\n<li>Die Schreibleistung kann schneller sein als bei einer SQL-Datenbank, da weniger Datenintegrit\u00e4tsregeln durchgesetzt werden m\u00fcssen.<\/li>\n<li>Das Sharding &#8211; also die Verteilung von Daten auf mehrere Rechner &#8211; wird einfacher, weil es nicht notwendig ist, auf Daten in anderen Collections zu verweisen.<\/li>\n<\/ul>\n<h2>Einfache MongoDB-Abfragen<\/h2>\n<p>Du kannst alle Dokumente in einer Sammlung, z. B. einer Person, auflisten, indem du ein leeres find() verwendest:<\/p>\n<pre><code class=\"language-bash\">db.person.find({})<\/code><\/pre>\n<p>Die <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/command\/count\/\">Methode count()<\/a> gibt die Anzahl der Dokumente zur\u00fcck (in unserem Fall sind es 7):<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).count();<\/code><\/pre>\n<p>Eine <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/update\/sort\/\">sort()-Methode<\/a> gibt die Dokumente in einer beliebigen Reihenfolge zur\u00fcck, z. B. nach Namen in umgekehrter alphabetischer Reihenfolge:<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).sort({ name: -1 });<\/code><\/pre>\n<p>Du kannst auch die Anzahl der zur\u00fcckgegebenen Dokumente begrenzen, z.B. die ersten drei Namen finden:<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).sort({ name: 1 }).limit(2);<\/code><\/pre>\n<p>Du kannst nach bestimmten Datens\u00e4tzen suchen, indem du eine Abfrage mit einem oder mehreren Feldern definierst, z. B. alle Personendokumente finden, in denen der Name &#8222;Claire&#8220; steht:<\/p>\n<pre><code class=\"language-bash\">db.person.find({ name: 'Claire' });<\/code><\/pre>\n<p><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/\">Logische Operatoren<\/a> wie $and, $or, $not, $gt (gr\u00f6\u00dfer als), $lt (kleiner als) und $ne (ungleich) werden ebenfalls unterst\u00fctzt, z. B. alle Personendokumente, bei denen das Unternehmen entweder &#8222;Alpha Inc&#8220; oder &#8222;Beta Inc&#8220; ist:<\/p>\n<pre><code class=\"language-bash\">db.person.find({\n  $or: [\n    { company: 'Alpha Inc' },\n    { company: 'Beta Inc' }\n  ]\n});<\/code><\/pre>\n<p>In der Beispieldatenbank k\u00f6nnte das gleiche Ergebnis mit $nin (nicht in) erzielt werden, um alle Dokumente zu extrahieren, bei denen das Unternehmen <strong>nicht<\/strong> &#8222;Gamma Inc&#8220; ist:<\/p>\n<pre><code class=\"language-bash\">db.person.find({\n  company: { $nin: ['Gamma Inc'] }\n});<\/code><\/pre>\n<p>Ein zweites Wertobjekt in der find()-Methode legt eine <em>Projektion<\/em> fest, die die zur\u00fcckgegebenen Felder definiert. In diesem Beispiel wird nur der Name zur\u00fcckgegeben (die _id des Dokuments wird immer zur\u00fcckgegeben, es sei denn, sie wird explizit ausgeschaltet):<\/p>\n<pre><code class=\"language-bash\">db.person.find(\n  { name:'Claire' },\n  { _id:0, name:1 }\n);<\/code><\/pre>\n<p>Das Ergebnis:<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Claire\"\n}<\/code><\/pre>\n<p>Mit der <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/elemMatch\/\" target=\"_blank\" rel=\"noopener noreferrer\">Abfrage $elemMatch<\/a> kannst du Elemente in einem Array finden, z. B. alle Dokumente, in denen das Telefon-Array ein Arbeitselement enth\u00e4lt. Das gleiche $elemMatch kann in der Projektion verwendet werden, um nur die Arbeitsnummer anzuzeigen:<\/p>\n<pre><code class=\"language-bash\">db.person.find(\n  {\n    telephone: { $elemMatch: { work: { $exists: true }} }\n  },\n  {\n    _id: 0,\n    name:1,\n    telephone: { $elemMatch: { work: { $exists: true }}}\n  }\n);<\/code><\/pre>\n<p>Das Ergebnis:<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Abdul\",\n  \"telephone\" : [\n    { \"work\" : \"9876543210\" }\n  ]\n},\n{\n  \"name\" : \"Henry\",\n  \"telephone\" : [\n    { \"work\" : \"012301230123\" }\n  ]\n}<\/code><\/pre>\n<h2>Cursors in MongoDB verwenden<\/h2>\n<p>Die meisten Datenbanktreiber erlauben es, die Ergebnisse einer Abfrage als Array oder \u00e4hnliche Datenstruktur zur\u00fcckzugeben. Wenn diese Menge jedoch Tausende von Dokumenten enth\u00e4lt, kann das zu Speicherproblemen f\u00fchren.<\/p>\n<p>Wie die meisten SQL-Datenbanken unterst\u00fctzt auch MongoDB das Konzept der <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/js-cursor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Cursor<\/a>. Mit Cursors kann eine Anwendung die Abfrageergebnisse einzeln lesen, bevor sie mit dem n\u00e4chsten Element fortf\u00e4hrt oder die Suche abbricht.<\/p>\n<p>Cursors k\u00f6nnen auch von einer MongoDB-Shell aus verwendet werden:<\/p>\n<pre><code class=\"language-bash\">let myCursor = db.person.find( {} );\n\nwhile ( myCursor.hasNext() ) {\n  print(tojson( myCursor.next() ));\n}<\/code><\/pre>\n<h2>Wie man Indizes in MongoDB erstellt<\/h2>\n<p>Die Personensammlung enth\u00e4lt derzeit sieben Dokumente, so dass eine Abfrage nicht sehr rechenintensiv ist. Stell dir aber vor, du hast eine Million Kontakte mit einem Namen und einer E-Mail-Adresse. Die Kontakte k\u00f6nnen nach Namen geordnet sein, aber die E-Mail-Adressen werden in einer scheinbar zuf\u00e4lligen Reihenfolge stehen.<\/p>\n<p>Wenn du einen Kontakt nach seiner E-Mail-Adresse suchen willst, m\u00fcsste die Datenbank bis zu einer Million Eintr\u00e4ge durchsuchen, bevor sie eine \u00dcbereinstimmung findet. Durch das Hinzuf\u00fcgen eines Indexes f\u00fcr das E-Mail-Feld wird eine Nachschlagetabelle erstellt, in der die E-Mails in alphabetischer Reihenfolge gespeichert werden. Die Datenbank kann nun effizientere Suchalgorithmen verwenden, um die richtige Person zu finden.<\/p>\n<p>Indizes werden wichtig, wenn die Anzahl der Dokumente steigt. Im Allgemeinen solltest du einen Index auf jedes Feld anwenden, auf das in einer Abfrage Bezug genommen werden k\u00f6nnte. Du <em>k\u00f6nntest<\/em> Indizes auf jedes Feld anwenden, aber sei dir bewusst, dass dies die Datenaktualisierung verlangsamen und den ben\u00f6tigten Speicherplatz erh\u00f6hen w\u00fcrde, da eine erneute Indizierung erforderlich wird.<\/p>\n<p>MongoDB bietet eine Reihe von Indexarten.<\/p>\n<h3>Einzelfeld-Indizes<\/h3>\n<p>Die meisten Indizes werden auf einzelne Felder angewandt, z.B. das Namensfeld in aufsteigender alphabetischer Reihenfolge indizieren:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex({ name: 1 });<\/code><\/pre>\n<p>Die Verwendung von -1 kehrt die Reihenfolge um. Das w\u00e4re in unserem Beispiel von geringem Nutzen, aber es k\u00f6nnte praktisch sein, wenn du ein Datumsfeld hast, in dem neuere Ereignisse Vorrang haben.<\/p>\n<p>Drei weitere Indizes sind in der Beispiel-Datenbank mongodemo n\u00fctzlich:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { company: 1 } );\ndb.company.createIndex( { name: 1 } );\ndb.company.createIndex( { base: 1 } );<\/code><\/pre>\n<h3>Zusammengesetzte Indizes f\u00fcr mehrere Felder<\/h3>\n<p>Zwei oder mehr Felder k\u00f6nnen in einem Index angegeben werden, z. B.<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { name: 1, company: 1 } );<\/code><\/pre>\n<p>Dies kann n\u00fctzlich sein, wenn ein Feld regelm\u00e4\u00dfig in Verbindung mit einem anderen in Suchanfragen verwendet wird.<\/p>\n<h3>Multikey-Indizes auf Array- oder Objektelementen<\/h3>\n<p>Dokumente k\u00f6nnen sehr komplex sein und es ist oft notwendig, Felder tiefer in der Struktur zu indizieren, wie z. B. die Telefonnummer der Arbeit:<\/p>\n<pre><code class=\"language-bash\">db.products.createIndex( { 'telephone.work': 1 } );<\/code><\/pre>\n<h3>Wildcard-Indizes<\/h3>\n<p>Ein Wildcard-Index kann jedes Feld in einem Dokument indizieren. Das ist in der Regel bei kleineren und einfacheren Dokumenten praktisch, die auf verschiedene Arten abgefragt werden k\u00f6nnen:<\/p>\n<pre><code class=\"language-bash\">db.company.createIndex( { '$**': 1 } );<\/code><\/pre>\n<h3>Volltext-Indizes<\/h3>\n<p>Mit einem Textindex kannst du suchmaschinen\u00e4hnliche Abfragen erstellen, die den Text in allen Stringfeldern untersuchen und nach Relevanz ordnen. Du kannst den Textindex auf bestimmte Felder beschr\u00e4nken:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { name: \"text\", company: \"text\" } );<\/code><\/pre>\n<p>&#8230;oder einen Textindex f\u00fcr alle String-Felder erstellen:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { \"$**\": \"text\" } );<\/code><\/pre>\n<p>Mit dem <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/text-search\/\" target=\"_blank\" rel=\"noopener noreferrer\">$text-Operator<\/a> kannst du diesen Index durchsuchen, zum Beispiel alle Dokumente finden, in denen &#8222;Gamma&#8220; erw\u00e4hnt wird:<\/p>\n<pre><code class=\"language-bash\">db.person.find({ $text: { $search: 'Gamma' } });<\/code><\/pre>\n<p>Beachte, dass Volltextsuchen in der Regel f\u00fcnf oder mehr Zeichen ben\u00f6tigen, um brauchbare Ergebnisse zu liefern.<\/p>\n<h3>Andere Index-Typen<\/h3>\n<p>MongoDB bietet mehrere andere spezialisierte Index-Typen:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/index-hashed\/\" target=\"_blank\" rel=\"noopener noreferrer\">hashed index<\/a><\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/2dsphere\/\" target=\"_blank\" rel=\"noopener noreferrer\">2d-Index<\/a> &#8211; Punkte auf einer zweidimensionalen Ebene<\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/2d\/\" target=\"_blank\" rel=\"noopener noreferrer\">2dsphere-Index<\/a> &#8211; Geometrien auf einer erd\u00e4hnlichen Kugel<\/li>\n<\/ul>\n<h2>Wie man MongoDB-Indizes verwaltet<\/h2>\n<p>Die f\u00fcr eine Sammlung definierten Indizes k\u00f6nnen mit untersucht werden:<\/p>\n<pre><code class=\"language-bash\">db.person.getIndexes();<\/code><\/pre>\n<p>Dies gibt ein Array von Ergebnissen zur\u00fcck, wie zum Beispiel:<\/p>\n<pre><code class=\"language-bash\">[\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"_id\" : 1.0 },\n    \"name\" : \"_id_\"\n  },\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"company\" : 1.0 },\n    \"name\" : \"company_1\"\n  },\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"name\" : 1.0 },\n    \"name\" : \"name_1\"\n  }\n]<\/code><\/pre>\n<p>Der &#8222;Schl\u00fcssel&#8220; definiert das Feld und die Reihenfolge, w\u00e4hrend &#8222;Name&#8220; ein eindeutiger Bezeichner f\u00fcr den Index ist &#8211; z. B. &#8222;Firma_1&#8220; f\u00fcr den Index des Feldes Firma.<\/p>\n<p>Die Effektivit\u00e4t eines Indexes kann untersucht werden, indem eine <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.explain\/\" target=\"_blank\" rel=\"noopener noreferrer\">.explain()-Methode<\/a> zu jeder Abfrage hinzugef\u00fcgt wird, z. B.<\/p>\n<pre><code class=\"language-bash\">db.person.find({ name:'Claire' }).explain();<\/code><\/pre>\n<p>Dies gibt einen gro\u00dfen Datensatz zur\u00fcck, aber das Objekt &#8222;winningPlan&#8220; zeigt den in der Abfrage verwendeten &#8222;indexName&#8220;:<\/p>\n<pre><code class=\"language-bash\">\"winningPlan\" : {\n  \"stage\" : \"FETCH\",\n  \"inputStage\" : {\n    \"stage\" : \"IXSCAN\",\n    \"keyPattern\" : { \"name\" : 1.0 },\n    \"indexName\" : \"name_1\",\n  }\n}<\/code><\/pre>\n<p>Falls n\u00f6tig, kannst du einen Index l\u00f6schen, indem du auf seinen Namen verweist:<\/p>\n<pre><code class=\"language-bash\">db.person.dropIndex( 'name_1' );<\/code><\/pre>\n<p>oder mit Hilfe des Index-Spezifikationsdokuments:<\/p>\n<pre><code class=\"language-bash\">db.person.dropIndex({ name: 1 });<\/code><\/pre>\n<p>Mit der <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.dropIndexes\/\" target=\"_blank\" rel=\"noopener noreferrer\">dropIndexes()-Methode<\/a> kannst du mehr als einen Index in einem einzigen Befehl l\u00f6schen.<\/p>\n<h2>MongoDB-Datenvalidierungsschemata verwenden<\/h2>\n<p>Im Gegensatz zu SQL sind in MongoDB keine Datendefinitionsschemata erforderlich. Du kannst jederzeit beliebige Daten in ein beliebiges Dokument in einer beliebigen Sammlung stellen.<\/p>\n<p>Das gibt dir viel Freiheit. Es kann jedoch vorkommen, dass du darauf bestehen willst, dass Regeln eingehalten werden. Zum Beispiel sollte es nicht m\u00f6glich sein, ein Dokument in die Personensammlung einzuf\u00fcgen, wenn es keinen Namen enth\u00e4lt.<\/p>\n<p>Validierungsregeln k\u00f6nnen mit Hilfe eines <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/jsonSchema\/\" target=\"_blank\" rel=\"noopener noreferrer\">$jsonSchema-Objekts<\/a> festgelegt werden, das ein Array von erforderlichen Elementen und die Eigenschaften jedes validierten Feldes definiert. Die Personensammlung wurde bereits erstellt, aber du kannst trotzdem ein Schema definieren, das festlegt, dass ein Namensstring erforderlich ist:<\/p>\n<pre><code class=\"language-bash\">db.runCommand({\n  collMod: 'person',\n  validator: {\n    $jsonSchema: {\n      required: [ 'name' ],\n      properties: {\n        name: {\n          bsonType: 'string',\n          description: 'name string required'\n        }\n      }\n    }\n  }\n});<\/code><\/pre>\n<p>Versuche, ein Personendokument ohne einen Namen einzuf\u00fcgen:<\/p>\n<pre><code class=\"language-bash\">db.person.insertOne({ company: 'Alpha Inc' });<\/code><\/pre>\n<p>&#8230;und der Befehl wird fehlschlagen:<\/p>\n<pre><code class=\"language-bash\">{\n  \"index\" : 0.0,\n  \"code\" : 121.0,\n  \"errmsg\" : \"Document failed validation\",\n  \"op\" : {\n      \"_id\" : ObjectId(\"624591771658cd08f8290401\"),\n      \"company\" : \"Alpha Inc\"\n  }\n}<\/code><\/pre>\n<p>Schemas k\u00f6nnen auch definiert werden, wenn du <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.createCollection\/\" target=\"_blank\" rel=\"noopener noreferrer\">eine Sammlung erstellst<\/a>, bevor sie verwendet wird. Der folgende Befehl setzt die gleichen Regeln wie oben um:<\/p>\n<pre><code class=\"language-bash\">db.createCollection('person', {\n  validator: {\n    $jsonSchema: {\n        required: [ 'name' ],\n        properties: {\n          name: {\n          bsonType: 'string',\n          description: 'name string required'\n          }\n      }\n    }\n  }\n});<\/code><\/pre>\n<p>In diesem komplexeren Beispiel wird eine Benutzersammlung erstellt, die \u00fcberpr\u00fcft, dass ein Name, eine E-Mail-Adresse und mindestens eine Telefonnummer angegeben werden m\u00fcssen:<\/p>\n<pre><code class=\"language-bash\">db.createCollection('users', {\n  validator: {\n    $jsonSchema: {\n      required: [ 'name', 'email', 'telephone' ],\n      properties: {\n        name: {\n          bsonType: 'string',\n          description: 'name string required'\n          },\n          email: {\n        bsonType: 'string',\n          pattern: '^.+@.+$',\n          description: 'valid email required'\n          },\n        telephone: {\n          bsonType: 'array',\n          minItems: 1,\n          description: 'at least one telephone number required'\n          }\n      }\n    }\n  }\n});<\/code><\/pre>\n<h2>Wie man bestehende Dokumente in MongoDB aktualisiert<\/h2>\n<p>MongoDB bietet mehrere <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/update-methods\/\" target=\"_blank\" rel=\"noopener noreferrer\">Aktualisierungsmethoden<\/a>, darunter <code>updateOne()<\/code>, <code>updateMany()<\/code> und <code>replaceOne()<\/code>. Diese werden \u00fcbergeben:<\/p>\n<ul>\n<li>Ein Filterobjekt, das die zu aktualisierenden Dokumente ausfindig macht<\/li>\n<li>Ein Update-Objekt &#8211; oder ein Array von Update-Objekten &#8211; das die zu \u00e4ndernden Daten beschreibt<\/li>\n<li>Ein optionales Options-Objekt. Die n\u00fctzlichste Eigenschaft ist upsert, mit der ein neues Dokument eingef\u00fcgt werden kann, wenn keines gefunden wird.<\/li>\n<\/ul>\n<p>Das folgende Beispiel aktualisiert das Personendokument, in dem der Name auf &#8222;Henry&#8220; gesetzt ist. Es entfernt die Telefonnummer f\u00fcr die Arbeit, f\u00fcgt eine Telefonnummer f\u00fcr zu Hause hinzu und setzt ein neues Geburtsdatum:<\/p>\n<pre><code class=\"language-bash\">db.person.updateOne(\n  { name: 'Henry' },\n  [\n    { $unset: [ 'telephone.work' ] },\n    { $set: {\n      'birthdate': new ISODate('1980-01-01'),\n      'telephone': [ { 'home': '789789789' } ]\n    } }\n  ]\n);<\/code><\/pre>\n<p>Das n\u00e4chste Beispiel aktualisiert das Personendokument, in dem der Name &#8222;Ian&#8220; steht. Dieser Name existiert derzeit nicht, aber wenn du hochladen auf &#8222;true&#8220; setzt, wird er erstellt:<\/p>\n<pre><code class=\"language-bash\">db.person.updateOne(\n  { name: 'Ian' },\n  { $set: { company: 'Beta Inc' } },\n  { upsert: true }\n);<\/code><\/pre>\n<p>Du kannst jederzeit Abfragebefehle ausf\u00fchren, um die Datenaktualisierungen zu \u00fcberpr\u00fcfen.<\/p>\n<h2>Wie man Dokumente in MongoDB l\u00f6scht<\/h2>\n<p>Im obigen Beispiel f\u00fcr die Aktualisierung wurde mit $unset die Telefonnummer der Arbeit aus dem Dokument mit dem Namen &#8222;Henry&#8220; entfernt. Um ein ganzes Dokument zu l\u00f6schen, kannst du eine von mehreren <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/delete-methods\/\" target=\"_blank\" rel=\"noopener noreferrer\">L\u00f6schmethoden<\/a> verwenden, z. B. <code>deleteOne()<\/code>, <code>deleteMany()<\/code> und <code>remove()<\/code> (die ein oder mehrere Dokumente l\u00f6schen k\u00f6nnen).<\/p>\n<p>Das neu erstellte Dokument f\u00fcr Ian kann mit einem entsprechenden Filter gel\u00f6scht werden:<\/p>\n<pre><code class=\"language-bash\">db.person.deleteOne({ name: 'Ian' });<\/code><\/pre>\n<h2>Verwendung von Aggregationsoperationen in MongoDB<\/h2>\n<p><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/aggregation\/\" target=\"_blank\" rel=\"noopener noreferrer\">Aggregation<\/a> ist m\u00e4chtig, aber manchmal schwer zu verstehen. Sie definiert eine Reihe &#8211; oder <em>Pipeline<\/em> &#8211; von Operationen in einem Array. Jede Stufe dieser Pipeline <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/meta\/aggregation-quick-reference\/\" target=\"_blank\" rel=\"noopener noreferrer\">f\u00fchrt eine Operation durch<\/a>, wie z. B. das Filtern, Gruppieren, Berechnen oder \u00c4ndern einer Gruppe von Dokumenten. Eine Stufe kann auch ein SQL JOIN-\u00e4hnliches Verhalten mit einer <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/lookup\/\" target=\"_blank\" rel=\"noopener noreferrer\">$lookup-Operation<\/a> verwenden. Die daraus resultierenden Dokumente werden an die n\u00e4chste Stufe der Pipeline weitergeleitet, damit sie bei Bedarf weiterverarbeitet werden k\u00f6nnen.<\/p>\n<p>Die Aggregation l\u00e4sst sich am besten anhand eines Beispiels veranschaulichen. Wir werden Schritt f\u00fcr Schritt eine Abfrage erstellen, die den Namen, das Unternehmen und die Telefonnummer (falls verf\u00fcgbar) aller Personen liefert, die f\u00fcr eine Organisation in den USA arbeiten.<\/p>\n<p>In der ersten Operation wird ein $match ausgef\u00fchrt, um Unternehmen mit Sitz in den USA zu filtern:<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } }\n]);<\/code><\/pre>\n<p>Dies gibt zur\u00fcck:<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853b\"),\n  \"name\" : \"Alpha Inc\",\n  \"base\" : \"US\"\n}\n{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853c\"),\n  \"name\" : \"Beta Inc\",\n  \"base\" : \"US\"\n}<\/code><\/pre>\n<p>Wir k\u00f6nnen dann einen neuen Pipeline-Operator $lookup hinzuf\u00fcgen, der den Unternehmensnamen (localField) mit dem Unternehmen (foreignField) in der Personensammlung (from) abgleicht. Die Ausgabe wird als Mitarbeiter-Array an das Dokument jedes Unternehmens angeh\u00e4ngt:<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: {\n      from: 'person',\n      localField: 'name',\n      foreignField: 'company',\n            as: 'employee'\n          }\n        }\n]);<\/code><\/pre>\n<p>Und hier ist das Ergebnis:<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853b\"),\n  \"name\" : \"Alpha Inc\",\n  \"base\" : \"US\",\n  \"employee\" : [\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n      \"name\" : \"Abdul\",\n      \"company\" : \"Alpha Inc\",\n      \"telephone\" : [\n        { \"home\" : \"0123456789\" },\n        { \"work\" : \"9876543210\" }\n      ]\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8537\"),\n      \"name\" : \"Dawn\",\n      \"company\" : \"Alpha Inc\"\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b853a\"),\n      \"name\" : \"Henry\",\n      \"company\" : \"Alpha Inc\",\n      \"telephone\" : [\n        { \"home\" : \"789789789\" }\n      ],\n    }\n  ]\n}\n{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853c\"),\n  \"name\" : \"Beta Inc\",\n  \"base\" : \"US\",\n  \"employee\" : [\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8535\"),\n      \"name\" : \"Brian\",\n      \"company\" : \"Beta Inc\"\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8538\"),\n      \"name\" : \"Esther\",\n      \"company\" : \"Beta Inc\",\n      \"telephone\" : [\n       { \"home\" : \"001122334455\" }\n      ]\n    }\n  ]\n}<\/code><\/pre>\n<p>Eine <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/project\/#mongodb-pipeline-pipe.-project\" target=\"_blank\" rel=\"noopener noreferrer\">$project-Operation (Projektion)<\/a> kann nun alle Mitarbeiter-Arrays au\u00dfer denjenigen der Mitarbeiter entfernen. Danach folgt eine <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/unwind\/#mongodb-pipeline-pipe.-unwind\" target=\"_blank\" rel=\"noopener noreferrer\">$unwind-Operation<\/a>, um das Array zu zerst\u00f6ren und separate Mitarbeiterdokumente zu erhalten:<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: { from: 'person', localField: 'name', foreignField: 'company', as: 'employee' } },\n  { $project: { _id: 0, employee: 1 } },\n  { $unwind: '$employee' }\n]);<\/code><\/pre>\n<p>Das Ergebnis:<\/p>\n<pre><code class=\"language-bash\">{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n    \"name\" : \"Abdul\",\n    \"company\" : \"Alpha Inc\",\n    \"telephone\" : [\n      { \"home\" : \"0123456789\" },\n      { \"work\" : \"9876543210\" }\n    ]\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8537\"),\n    \"name\" : \"Dawn\",\n    \"company\" : \"Alpha Inc\"\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b853a\"),\n    \"name\" : \"Henry\",\n    \"company\" : \"Alpha Inc\",\n    \"telephone\" : [\n      { \"home\" : \"789789789\" }\n    ]\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8535\"),\n    \"name\" : \"Brian\",\n    \"company\" : \"Beta Inc\"\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8538\"),\n    \"name\" : \"Esther\",\n    \"company\" : \"Beta Inc\",\n    \"telephone\" : [\n      { \"home\" : \"001122334455\" }\n    ]\n  }\n}<\/code><\/pre>\n<p>Schlie\u00dflich wird eine <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/replaceRoot\/#mongodb-pipeline-pipe.-replaceRoot\" target=\"_blank\" rel=\"noopener noreferrer\">$replaceRoot-Operation<\/a> verwendet, um jedes Dokument so zu formatieren, dass nur der Name, das Unternehmen und die Telefonnummer der Person zur\u00fcckgegeben werden. Danach folgt eine <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/sort\/#mongodb-pipeline-pipe.-sort\" target=\"_blank\" rel=\"noopener noreferrer\">$sort-Operation<\/a>, um die Dokumente in aufsteigender Reihenfolge der Namen auszugeben. Die vollst\u00e4ndige Aggregatabfrage:<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: { from: 'person', localField: 'name', foreignField: 'company', as: 'employee' } },\n  { $project: { _id: 0, employee: 1 } },\n  { $unwind: '$employee' },\n  { $replaceRoot: {\n    newRoot: {\n      $mergeObjects: [ {\n        name: \"$employee.name\",\n        company: '$employee.company',\n        work: { $first: '$employee.telephone.work' }\n      }, \"$name\" ]\n   } } },\n  { $sort: { name: 1 } }\n]);<\/code><\/pre>\n<p>Das Ergebnis:<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Abdul\",\n  \"company\" : \"Alpha Inc\",\n  \"work\" : \"9876543210\"\n}\n{\n  \"name\" : \"Brian\",\n  \"company\" : \"Beta Inc\",\n}\n{\n  \"name\" : \"Dawn\",\n  \"company\" : \"Alpha Inc\",\n}\n{\n  \"name\" : \"Esther\",\n  \"company\" : \"Beta Inc\"\n}\n{\n  \"name\" : \"Henry\",\n  \"company\" : \"Alpha Inc\"\n}<\/code><\/pre>\n<p>Es gibt auch andere M\u00f6glichkeiten, dieses Ergebnis zu erreichen, aber der wichtigste Punkt ist, dass MongoDB den Gro\u00dfteil der Arbeit erledigen kann. Es ist nur selten n\u00f6tig, Dokumente zu lesen und die Daten direkt in deinem Anwendungscode zu manipulieren.<\/p>\n<h2>So f\u00fchrst du MongoDB-Massenoperationen aus<\/h2>\n<p>Standardm\u00e4\u00dfig kann MongoDB 1.000 gleichzeitige Operationen verarbeiten. Bei der Verwendung von Mongosh ist das wahrscheinlich kein Problem, aber Anwendungen k\u00f6nnen diese Grenze erreichen, wenn sie eine Reihe von Datenmanipulationen an einzelnen Datens\u00e4tzen vornehmen. Node.js-Anwendungen sind besonders problematisch, weil sie schnell eine Reihe von asynchronen Anfragen stellen k\u00f6nnen, ohne warten zu m\u00fcssen, bis diese abgeschlossen sind.<\/p>\n<p>Um dieses Problem zu umgehen, bietet MongoDB eine <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/js-bulk\/\" target=\"_blank\" rel=\"noopener noreferrer\">API f\u00fcr Massenoperationen<\/a>, die eine beliebige Anzahl von Aktualisierungen akzeptiert, die nacheinander oder in beliebiger Reihenfolge ausgef\u00fchrt werden k\u00f6nnen.<\/p>\n<p>Hier ist ein Pseudocode-Beispiel in Node.js:<\/p>\n<pre><code class=\"language-bash\">\/\/ reference the mycollection collection\nconst bulk = db.collection('mycollection').initializeUnorderedBulkOp();\n\n\/\/ make any number of data changes\nbulk.insertOne(...);\nbulk.insertMany(...)\nbulk.updateOne(...);\nbulk.deleteOne(...);\n\/\/ etc...\n\nbulk.execute();<\/code><\/pre>\n<p>Die letzte Anweisung gibt effektiv eine einzige MongoDB-Anfrage aus, so dass die Wahrscheinlichkeit, das Limit von 1.000 Operationen zu erreichen, geringer ist.<br \/>\n<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>MongoDB bietet einen flexiblen Speicher f\u00fcr Anwendungen wie Content Management Systeme, Adressb\u00fccher und soziale Netzwerke, bei denen strenge Datenstrukturen zu starr und schwer zu definieren sind. Daten k\u00f6nnen schnell geschrieben werden und das Sharding \u00fcber mehrere Server wird einfacher.<\/p>\n<p>Das Schreiben von Anwendungen mit einer MongoDB-Datenbank kann auch befreiend sein. Es ist m\u00f6glich, beliebige Daten in jedem Dokument in jeder Sammlung zu speichern. Das ist besonders praktisch, wenn du einen Prototyp oder ein Minimum Viable Product mit agilen Methoden entwickelst, bei denen sich die Anforderungen im Laufe der Zeit \u00e4ndern.<\/p>\n<p>Allerdings k\u00f6nnen komplexe Abfragen eine Herausforderung sein und Denormalisierungskonzepte sind schwer zu akzeptieren, wenn du aus der SQL-Welt umsteigst.<\/p>\n<p>MongoDB eignet sich weniger f\u00fcr Anwendungen mit strengen Transaktionsanforderungen, bei denen die Datenintegrit\u00e4t von entscheidender Bedeutung ist, wie z. B. bei Bank-, Buchhaltungs- und Lagerverwaltungssystemen. Hier gibt es identifizierbare Datenfelder, die vor Beginn der Programmierung entworfen werden sollten.<\/p>\n<p>Es gibt viele Anwendungen, die zwischen diesen beiden Extremen liegen, so dass die Wahl einer geeigneten Datenbank schwieriger wird. Gl\u00fccklicherweise haben NoSQL-Datenbanken wie MongoDB begonnen, SQL-\u00e4hnliche Optionen wie JOINs und Transaktionen zu \u00fcbernehmen.<\/p>\n<p>Umgekehrt bieten SQL-Datenbanken wie MySQL und PostgreSQL jetzt NoSQL-\u00e4hnliche JSON-Datenfelder an. Auch sie k\u00f6nnen deine Aufmerksamkeit verdienen, aber wie immer liegt die endg\u00fcltige Entscheidung bei dir.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Lernprogramm lernst du die Datenbank MongoDB kennen. Du erf\u00e4hrst, wie du die Software installierst, Daten manipulierst und die Datenentwurfstechniken auf deine eigenen Anwendungen anwendest. &#8230;<\/p>\n","protected":false},"author":188,"featured_media":51821,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[242,428,420,721,735],"topic":[922,991],"class_list":["post-51776","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-database-management-tool","tag-development","tag-mongodb","tag-nosql","topic-adminer","topic-web-entwicklungs-tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank<\/title>\n<meta name=\"description\" content=\"Open Source-Datenbankl\u00f6sungen sind der letzte Schrei. In diesem Leitfaden nehmen wir MongoDB unter die Lupe und helfen dir zu entscheiden, ob es die richtige L\u00f6sung f\u00fcr dein Projekt ist.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank\" \/>\n<meta property=\"og:description\" content=\"Open Source-Datenbankl\u00f6sungen sind der letzte Schrei. In diesem Leitfaden nehmen wir MongoDB unter die Lupe und helfen dir zu entscheiden, ob es die richtige L\u00f6sung f\u00fcr dein Projekt ist.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-27T07:03:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:18:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Craig Buckler\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Open Source-Datenbankl\u00f6sungen sind der letzte Schrei. In diesem Leitfaden nehmen wir MongoDB unter die Lupe und helfen dir zu entscheiden, ob es die richtige L\u00f6sung f\u00fcr dein Projekt ist.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@craigbuckler\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Craig Buckler\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\"},\"author\":{\"name\":\"Craig Buckler\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/715d986404b06691ab3014e06596908e\"},\"headline\":\"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank\",\"datePublished\":\"2022-06-27T07:03:51+00:00\",\"dateModified\":\"2025-10-01T19:18:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\"},\"wordCount\":3872,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg\",\"keywords\":[\"database\",\"database management tool\",\"development\",\"MongoDB\",\"NoSQL\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\",\"name\":\"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg\",\"datePublished\":\"2022-06-27T07:03:51+00:00\",\"dateModified\":\"2025-10-01T19:18:35+00:00\",\"description\":\"Open Source-Datenbankl\u00f6sungen sind der letzte Schrei. In diesem Leitfaden nehmen wir MongoDB unter die Lupe und helfen dir zu entscheiden, ob es die richtige L\u00f6sung f\u00fcr dein Projekt ist.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webentwicklungs-Tools\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/web-entwicklungs-tools\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/715d986404b06691ab3014e06596908e\",\"name\":\"Craig Buckler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"caption\":\"Craig Buckler\"},\"description\":\"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.\",\"sameAs\":[\"https:\/\/craigbuckler.com\/\",\"https:\/\/www.linkedin.com\/in\/craigbuckler\",\"https:\/\/x.com\/craigbuckler\",\"https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/craigbuckler\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank","description":"Open Source-Datenbankl\u00f6sungen sind der letzte Schrei. In diesem Leitfaden nehmen wir MongoDB unter die Lupe und helfen dir zu entscheiden, ob es die richtige L\u00f6sung f\u00fcr dein Projekt ist.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/","og_locale":"de_DE","og_type":"article","og_title":"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank","og_description":"Open Source-Datenbankl\u00f6sungen sind der letzte Schrei. In diesem Leitfaden nehmen wir MongoDB unter die Lupe und helfen dir zu entscheiden, ob es die richtige L\u00f6sung f\u00fcr dein Projekt ist.","og_url":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2022-06-27T07:03:51+00:00","article_modified_time":"2025-10-01T19:18:35+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg","type":"image\/jpeg"}],"author":"Craig Buckler","twitter_card":"summary_large_image","twitter_description":"Open Source-Datenbankl\u00f6sungen sind der letzte Schrei. In diesem Leitfaden nehmen wir MongoDB unter die Lupe und helfen dir zu entscheiden, ob es die richtige L\u00f6sung f\u00fcr dein Projekt ist.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg","twitter_creator":"@craigbuckler","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Craig Buckler","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/"},"author":{"name":"Craig Buckler","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/715d986404b06691ab3014e06596908e"},"headline":"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank","datePublished":"2022-06-27T07:03:51+00:00","dateModified":"2025-10-01T19:18:35+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/"},"wordCount":3872,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg","keywords":["database","database management tool","development","MongoDB","NoSQL"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/","url":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/","name":"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg","datePublished":"2022-06-27T07:03:51+00:00","dateModified":"2025-10-01T19:18:35+00:00","description":"Open Source-Datenbankl\u00f6sungen sind der letzte Schrei. In diesem Leitfaden nehmen wir MongoDB unter die Lupe und helfen dir zu entscheiden, ob es die richtige L\u00f6sung f\u00fcr dein Projekt ist.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/06\/was-ist-mongodb.jpeg","width":1460,"height":730,"caption":"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Webentwicklungs-Tools","item":"https:\/\/kinsta.com\/de\/thema\/web-entwicklungs-tools\/"},{"@type":"ListItem","position":3,"name":"Was ist MongoDB? Alles \u00fcber die beliebte Open-Source-Datenbank"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/715d986404b06691ab3014e06596908e","name":"Craig Buckler","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","caption":"Craig Buckler"},"description":"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.","sameAs":["https:\/\/craigbuckler.com\/","https:\/\/www.linkedin.com\/in\/craigbuckler","https:\/\/x.com\/craigbuckler","https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/craigbuckler\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/51776","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=51776"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/51776\/revisions"}],"predecessor-version":[{"id":51824,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/51776\/revisions\/51824"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/51776\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/51776\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/51776\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/51776\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/51776\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/51776\/translations\/es"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/51776\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/51821"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=51776"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=51776"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=51776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}