{"id":54209,"date":"2022-09-19T09:34:14","date_gmt":"2022-09-19T08:34:14","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=54209&#038;preview=true&#038;preview_id=54209"},"modified":"2023-08-18T09:23:41","modified_gmt":"2023-08-18T08:23:41","slug":"mongodb-operatoren","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/","title":{"rendered":"9 Arten von Mongodb-Operatoren, die du kennen musst"},"content":{"rendered":"<p>In jedem Unternehmen sind Daten dein gr\u00f6\u00dftes Kapital. Durch die Analyse von Daten kannst du Entscheidungen \u00fcber Kundentrends und Verhaltensvorhersagen treffen. Das steigert die Rentabilit\u00e4t deines Unternehmens und verbessert die Entscheidungsfindung.<\/p>\n<p>Ohne <a href=\"https:\/\/kinsta.com\/de\/blog\/open-source-database\/\">Datenbanksoftware<\/a> w\u00e4re eine einfache Aufgabe wie die Ermittlung des Durchschnitts aller Werte in einem System voller Datens\u00e4tze sehr m\u00fchsam. Zum Gl\u00fcck haben Datenbanken die Analyse von Daten mit Funktionen und Operatoren einfacher und schneller gemacht.<\/p>\n\n<p>Dieser Artikel beleuchtet die Operatoren, die in der Datenbanksoftware MongoDB verwendet werden.<\/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 sind MongoDB-Operatoren?<\/h2>\n<p><a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\">MongoDB<\/a> ist eine NoSQL-Datenbanksoftware, die dokumentenorientierte Informationen verwaltet.<\/p>\n<p>Eine der wichtigsten Eigenschaften von MongoDB ist ihre Geschwindigkeit. Um Abfragen schneller zu beantworten, kann MongoDB Operatoren verwenden, um bestimmte Funktionen auszuf\u00fchren.<\/p>\n<p>Operatoren sind spezielle Symbole, die Compilern helfen, mathematische oder logische Aufgaben auszuf\u00fchren. MongoDB bietet mehrere Arten von Operatoren, um mit der Datenbank zu interagieren.<\/p>\n<h2>MongoDB-Operator-Typen<\/h2>\n<p>Es gibt neun Arten von Operatoren, die jeweils nach ihrer Funktion benannt sind. Logische Operatoren zum Beispiel verwenden logische Operationen. Um sie auszuf\u00fchren, musst du ein bestimmtes Schl\u00fcsselwort verwenden und die Syntax beachten. Sie sind jedoch ziemlich einfach zu verstehen!<\/p>\n<p>Am Ende dieses Artikels wirst du die Grundlagen der einzelnen Operatoren und ihrer Funktionen kennenlernen.<\/p>\n<h3>Logische Operatoren<\/h3>\n<p>Logische Operatoren werden oft verwendet, um Daten nach bestimmten Bedingungen zu filtern. Sie erm\u00f6glichen auch die Auswertung vieler Bedingungen, auf die wir noch n\u00e4her eingehen werden.<\/p>\n<p>Im Folgenden findest du einige logische Operatoren, die du verwenden kannst:<\/p>\n<h4>$und<\/h4>\n<p>Eine &#8222;und&#8220;-Bedingung f\u00fchrt eine logische &#8222;und&#8220;-Operation mit einem Array aus zwei oder mehr Ausdr\u00fccken durch. Sie w\u00e4hlt die Dokumente aus, bei denen <em>alle<\/em> Bedingungen der Ausdr\u00fccke erf\u00fcllt sind.<\/p>\n<p>Dies ist die Standardsyntax f\u00fcr den Ausdruck <code>$and<\/code>:<\/p>\n<pre><code class=\"language-php\">{ $and: [ { &lt;expression1&gt; }, { &lt;expression2&gt; }, ... , { &lt;expressionN&gt; } ] }<\/code><\/pre>\n<pre><code class=\"language-php\">db.inventory.find( { $and: [ { quantity: { $lt: 15 } }, { price: 10 } ] } )<\/code><\/pre>\n<h4>$oder<\/h4>\n<p>Eine &#8222;oder&#8220;-Bedingung f\u00fchrt eine logische &#8222;oder&#8220;-Operation an einem Array aus zwei oder mehr Ausdr\u00fccken durch. Sie w\u00e4hlt die Dokumente aus, bei denen mindestens einer der Ausdr\u00fccke wahr ist.<\/p>\n<p>Dies ist die Standardsyntax f\u00fcr den Ausdruck <code>$or<\/code>:<\/p>\n<pre><code class=\"language-php\">{ $or: [ { &lt;expression1&gt; }, { &lt;expression2&gt; }, ... , { &lt;expressionN&gt; } ] }.<\/code><\/pre>\n<p>Wenn wir zum Beispiel Dokumente ausw\u00e4hlen wollen, bei denen der Preis $10 oder die Menge weniger als 15 betr\u00e4gt, k\u00f6nnen wir die folgende Abfrage eingeben:<\/p>\n<pre><code class=\"language-php\">db.inventory.find( { $or: [ { quantity: { $lt: 15 } }, { price: 10 } ] } )<\/code><\/pre>\n<p>Wir m\u00fcssen den Ausdruck nicht auf zwei Kriterien beschr\u00e4nken &#8211; wir k\u00f6nnen weitere hinzuf\u00fcgen. Die folgende Abfrage w\u00e4hlt zum Beispiel die Dokumente aus, bei denen der Preis gleich $10 ist, die Menge unter 15 liegt oder das Tag station\u00e4r ist:<\/p>\n<pre><code class=\"language-php\">db.inventory.find( { $or: [ { quantity: { $lt: 15 } }, { price: 10 }, { tag: \"stationary\" }] } )<\/code><\/pre>\n<p>Wenn diese Klauseln ausgef\u00fchrt werden, f\u00fchrt MongoDB entweder einen Collection Scan oder einen Index Scan durch. Wenn alle Indizes die Klauseln unterst\u00fctzen, verwendet MongoDB Indizes, um einen <code>$or<\/code> Ausdruck zu \u00fcberpr\u00fcfen. Andernfalls verwendet es stattdessen einen Collection Scan.<\/p>\n<p>Wenn du jedoch die Kriterien im selben Feld pr\u00fcfen willst, solltest du den <code>$in<\/code> Operator statt des <code>$or<\/code> Operators verwenden. Wenn du zum Beispiel eine Sammlung von Dokumenten suchst, bei denen die Menge entweder 20 oder 50 betr\u00e4gt, musst du stattdessen die folgende <code>$in<\/code> Abfrage ausf\u00fchren:<\/p>\n<pre><code class=\"language-php\">db.inventory.find ( { quantity: { $in: [20, 50] } } )<\/code><\/pre>\n<p>Auf den <code>$in<\/code> Operator gehen wir sp\u00e4ter noch genauer ein.<\/p>\n<h4>$nor<\/h4>\n<p>Dieser Operator f\u00fchrt eine logische &#8222;nor&#8220;-Operation auf einem Array mit einem oder mehreren Ausdr\u00fccken durch. Anschlie\u00dfend w\u00e4hlt er die Dokumente aus, die die Abfrageausdr\u00fccke nicht erf\u00fcllen. Einfacher ausgedr\u00fcckt: Er macht das Gegenteil der <code>$or<\/code> Bedingung.<\/p>\n<p>Dies ist die allgemeine Syntax:<\/p>\n<pre><code class=\"language-php\">{ $nor: [ { &lt;expression1&gt; }, { &lt;expression2&gt; }, ...  { &lt;expressionN&gt; } ] }<\/code><\/pre>\n<p>Betrachten wir die folgende Abfrage:<\/p>\n<pre><code class=\"language-php\">db.inventory.find( { $nor: [ { price: 3.99 }, { sale: true } ]  } )<\/code><\/pre>\n<p>Diese Abfrage w\u00e4hlt die Dokumente aus, die enthalten:<\/p>\n<ul>\n<li>ein Preisfeldwert ungleich $3,99 und ein Verkaufswert ungleich true; oder<\/li>\n<li>ein Preisfeld mit einem Wert ungleich $3,99 und ein leeres oder fehlendes Verkaufsfeld; oder<\/li>\n<li>kein Preisfeld und ein Verkaufsfeld, das nicht gleich wahr ist; oder<\/li>\n<li>weder ein Preisfeld noch ein Verkaufsfeld ausgef\u00fcllt oder vorhanden ist.<\/li>\n<\/ul>\n<h4>$nicht<\/h4>\n<p>Dieser Operator f\u00fchrt eine logische &#8222;Nicht&#8220;-Operation auf einem Array f\u00fcr den angegebenen Ausdruck durch. Er w\u00e4hlt dann die Dokumente aus, die nicht mit den Abfrageausdr\u00fccken \u00fcbereinstimmen. Dazu geh\u00f6ren auch die Dokumente, die das Feld nicht enthalten.<\/p>\n<p>Dies ist die allgemeine Syntax:<\/p>\n<pre><code class=\"language-php\">{ field: { $not: { &lt;operator-expression&gt; } } }<\/code><\/pre>\n<p>Nimm zum Beispiel die folgende Abfrage:<\/p>\n<pre><code class=\"language-php\">db.inventory.find( { price: { $not: { $lt: 3.99 } } } )<\/code><\/pre>\n<p>Diese Abfrage w\u00fcrde die Dokumente ausw\u00e4hlen, die Folgendes enthalten:<\/p>\n<ul>\n<li>ein Preisfeld, dessen Wert gr\u00f6\u00dfer oder gleich $3,99 ist; und<\/li>\n<li>ein Preisfeld, dass nicht ausgef\u00fcllt ist oder nicht existiert.<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p><code>{ $not: { $lt: 3.99 } }<\/code> unterscheidet sich vom <code>$gte<\/code> Operator. <code>{ $gte: 3.99 }<\/code> gibt nur die Dokumente zur\u00fcck, in denen das Preisfeld existiert und sein Wert gr\u00f6\u00dfer oder gleich $3.99 ist (der Operator <code>$not<\/code> gibt auch die Dokumente zur\u00fcck, in denen das Preisfeld nicht existiert).<\/p>\n<\/aside>\n\n<h3>Vergleichsoperatoren<\/h3>\n<p>Vergleichsoperatoren k\u00f6nnen verwendet werden, um Werte in einem oder mehreren Dokumenten zu vergleichen.<\/p>\n<p>Im Folgenden findest du ein Codebeispiel f\u00fcr eine einfache Bestandserfassung f\u00fcr einen Supermarkt:<\/p>\n<pre><code class=\"language-php\">{ _id: 1, item: { name: \"apple\", code: \"123\" }, qty: 15, tags: [ \"A\", \"B\", \"C\" ] },\n{ _id: 2, item: { name: \"banana\", code: \"123\" }, qty: 20, tags: [ \"B\" ] },\n{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] },\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] },\n{ _id: 5, item: { name: \"pears\", code: \"000\" }, qty: 20, tags: [ [ \"A\", \"B\" ], \"C\" ] },\n{ _id: 6, item: { name: \"strawberry\", code: \"123\" }, tags: [ \"B\" ] }<\/code><\/pre>\n<p>Anhand dieses Beispiels werden wir im Folgenden die einzelnen Vergleichsoperatoren n\u00e4her erl\u00e4utern.<\/p>\n<h4>Gleich ($eq)<\/h4>\n<p>Dieser Operator vergleicht Werte, die gleich dem angegebenen Wert sind:<\/p>\n<pre><code class=\"language-php\">{ &lt;field&gt;: { $eq: &lt;value&gt; } }<\/code><\/pre>\n<p>Wenn wir zum Beispiel ein bestimmtes Dokument aus der Bestandssammlung abrufen wollen, das genau den Mengenwert &#8222;20&#8220; hat, geben wir den folgenden Befehl ein:<\/p>\n<pre><code class=\"language-php\">db.inventory.find( { qty: { $eq: 20 } } )<\/code><\/pre>\n<p>Die Abfrage w\u00fcrde das Folgende zur\u00fcckgeben:<\/p>\n<pre><code class=\"language-php\">{ _id: 2, item: { name: \"banana\", code: \"123\" }, qty: 20, tags: [ \"B\" ] }, \n{ _id: 5, item: { name: \"pears\", code: \"000\" }, qty: 20, tags: [ [ \"A\", \"B\" ], \"C\" ] }<\/code><\/pre>\n<h4>Gr\u00f6\u00dfer als ($gt)<\/h4>\n<p>Dieser Operator passt, wenn die Werte gr\u00f6\u00dfer sind als der angegebene Wert:<\/p>\n<pre><code class=\"language-php\">{ field: { $gt: value } }<\/code><\/pre>\n<p>In diesem Beispiel finden wir die Dokumente, bei denen die Menge gr\u00f6\u00dfer als 15 ist:<\/p>\n<pre><code class=\"language-php\">db.inventory.find({\"qty\": { $gt: 15}})<\/code><\/pre>\n<p>Die Abfrage w\u00fcrde Folgendes ergeben:<\/p>\n<pre><code class=\"language-php\">{ _id: 2, item: { name: \"banana\", code: \"123\" }, qty: 20, tags: [ \"B\" ] }\n{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] }\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] }\n{ _id: 5, item: { name: \"pears\", code: \"000\" }, qty: 20, tags: [ [ \"A\", \"B\" ], \"C\" ] }<\/code><\/pre>\n<h4>Kleiner als ($lt)<\/h4>\n<p>Dieser Operator passt, wenn die Werte kleiner sind als der angegebene Wert:<\/p>\n<pre><code class=\"language-php\">{ field: { $lt: value } }<\/code><\/pre>\n<p>Lass uns die Dokumente mit einer Anzahl von weniger als 25 finden:<\/p>\n<pre><code class=\"language-php\">db.inventory.find({\"qty\": { $lt: 25}})<\/code><\/pre>\n<p>Die Abfrage w\u00fcrde Folgendes ergeben:<\/p>\n<pre><code class=\"language-php\">{ _id: 1, item: { name: \"apple\", code: \"123\" }, qty: 15, tags: [ \"A\", \"B\", \"C\" ] }\n{ _id: 2, item: { name: \"banana\", code: \"123\" }, qty: 20, tags: [ \"B\" ] }\n{ _id: 5, item: { name: \"pears\", code: \"000\" }, qty: 20, tags: [ [ \"A\", \"B\" ], \"C\" ] }<\/code><\/pre>\n<h4>Gr\u00f6\u00dfer oder gleich ($gte)<\/h4>\n<p>Dieser Operator passt, wenn die Werte gr\u00f6\u00dfer oder gleich dem angegebenen Wert sind:<\/p>\n<pre><code class=\"language-php\">{ field: { $gte: value } }<\/code><\/pre>\n<p>In diesem Beispiel suchen wir die Dokumente, bei denen die Menge gr\u00f6\u00dfer oder gleich 25 ist:<\/p>\n<pre><code class=\"language-php\">db.inventory.find({\"qty\": { $gte: 25}})<\/code><\/pre>\n<p>Diese Abfrage w\u00fcrde das Folgende zur\u00fcckgeben:<\/p>\n<pre><code class=\"language-php\">{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] }\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] }<\/code><\/pre>\n<h4>Kleiner oder gleich ($lte)<\/h4>\n<p>Dieser Operator passt nur, wenn die Werte kleiner oder gleich dem angegebenen Wert sind:<\/p>\n<pre><code class=\"language-php\">{ field: { $lte: value } }<\/code><\/pre>\n<p>Suchen wir die Dokumente, deren Anzahl kleiner oder gleich 25 ist.<\/p>\n<pre><code class=\"language-php\">db.inventory.find({\"qty\": { $lte: 25}})<\/code><\/pre>\n<p>Wir k\u00f6nnen erwarten, dass diese Abfrage das Folgende zur\u00fcckgibt:<\/p>\n<pre><code class=\"language-php\">{ _id: 1, item: { name: \"apple\", code: \"123\" }, qty: 15, tags: [ \"A\", \"B\", \"C\" ] }\n{ _id: 2, item: { name: \"banana\", code: \"123\" }, qty: 20, tags: [ \"B\" ] }\n{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] }\n{ _id: 5, item: { name: \"pears\", code: \"000\" }, qty: 20, tags: [ [ \"A\", \"B\" ], \"C\" ] }<\/code><\/pre>\n<h4>In ($in)<\/h4>\n<p>Dieser Operator gibt die Dokumente zur\u00fcck, die mit den angegebenen Werten \u00fcbereinstimmen:<\/p>\n<pre><code class=\"language-php\">{ field: { $in: [&lt;value1&gt;, &lt;value2&gt;, ... &lt;valueN&gt; ] } }<\/code><\/pre>\n<p>Der Wert eines Feldes entspricht einem beliebigen Wert in dem angegebenen Array. Um zum Beispiel die Dokumente mit den Werten &#8222;30&#8220; und &#8222;15&#8220; in der Inventarsammlung abzurufen, w\u00fcrdest du so vorgehen:<\/p>\n<pre><code class=\"language-php\">db.inventory.find({ \"qty\": { $in: [30, 15]}})<\/code><\/pre>\n<p>Die Ausgabe w\u00fcrde lauten:<\/p>\n<pre><code class=\"language-php\">{ _id: 1, item: { name: \"apple\", code: \"123\" }, qty: 15, tags: [ \"A\", \"B\", \"C\" ] }\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] }<\/code><\/pre>\n<h4>Nicht in ($nin)<\/h4>\n<p>Dieser Operator gibt die Dokumente zur\u00fcck, die nicht mit den angegebenen Werten \u00fcbereinstimmen. Hier ist die grundlegende Syntax des <code>$nin<\/code> Operators:<\/p>\n<pre><code class=\"language-php\">{ field: { $nin: [ &lt;value1&gt;, &lt;value2&gt; ... &lt;valueN&gt; ]<\/code><\/pre>\n<p><code>$nin<\/code> w\u00e4hlt die Dokumente aus, bei denen:<\/p>\n<ul>\n<li>der Feldwert nicht im angegebenen Array enthalten ist; oder<\/li>\n<li>das Feld nicht existiert.<\/li>\n<\/ul>\n<p>Wenn das Feld Arrays enth\u00e4lt, w\u00e4hlt es Arrays aus, in denen kein Element aus dem Wertebereich vorhanden ist. Wir wollen zum Beispiel die Dokumente ausw\u00e4hlen, bei denen die Menge nicht gleich 20 oder 15 ist.<\/p>\n<p>Au\u00dferdem werden auch Dokumente ausgew\u00e4hlt, die kein Mengenfeld enthalten:<\/p>\n<pre><code class=\"language-php\">db.inventory.find({ \"qty\": { $nin: [ 20, 15 ]}})<\/code><\/pre>\n<p>Die Ausgabe w\u00fcrde lauten:<\/p>\n<pre><code class=\"language-php\">{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] }\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] }\n{ _id: 6, item: { name: \"strawberry\", code: \"123\" }, tags: [ \"B\" ] }<\/code><\/pre>\n<h4>Nicht gleich ($ne)<\/h4>\n<p>Der <code>$ne<\/code> Operator gibt die Dokumente zur\u00fcck, bei denen der angegebene Wert nicht gleich ist:<\/p>\n<pre><code class=\"language-php\">{ $ne: value } }<\/code><\/pre>\n<p>Nehmen wir an, wir wollen alle Dokumente ausw\u00e4hlen, bei denen die Menge nicht gleich 20 ist:<\/p>\n<pre><code class=\"language-php\">db.inventory.find( { qty: { $ne: 20 } } )<\/code><\/pre>\n<p>Die Ausgabe w\u00fcrde lauten:<\/p>\n<pre><code class=\"language-php\">{ _id: 1, item: { name: \"apple\", code: \"123\" }, qty: 15, tags: [ \"A\", \"B\", \"C\" ] }\n{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] }\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] }\n{ _id: 6, item: { name: \"strawberry\", code: \"123\" }, tags: [ \"B\" ] }<\/code><\/pre>\n<p>Anhand der obigen Ausgabe k\u00f6nnen wir sehen, dass die Abfrage Dokumente ausw\u00e4hlt, die kein Mengenfeld haben.<\/p>\n<h3>Element-Operatoren<\/h3>\n<p>Mit den Elementabfrageoperatoren k\u00f6nnen Dokumente anhand der Felder des Dokuments identifiziert werden. Die Elementoperatoren bestehen aus <code>$exist<\/code> und <code>$type<\/code>.<\/p>\n<h4>$exists<\/h4>\n<p>Dieser Operator findet Dokumente, die ein bestimmtes Feld haben. Dieser Operator hat einen booleschen Wert, der entweder <code>true<\/code> oder <code>false<\/code> sein kann.<\/p>\n<p>Wenn der Wert <code>true<\/code> ist, werden alle Dokumente gefunden, die das Feld enthalten, einschlie\u00dflich der Dokumente, in denen der Feldwert Null ist. Wenn &lt;boolean&gt; <code>false<\/code> ist, gibt die Abfrage nur die Dokumente zur\u00fcck, die das Feld nicht enthalten.<\/p>\n<p>Hier ist die Standardsyntax:<\/p>\n<pre><code class=\"language-php\">{ field: { $exists: &lt;boolean&gt; } } )<\/code><\/pre>\n<p>Nehmen wir ein Beispiel, in dem wir eine Sammlung von Daten f\u00fcr ein Array mit dem Namen &#8222;bagofmarbles&#8220; haben, in dem jede T\u00fcte Murmeln in verschiedenen Farben enth\u00e4lt:<\/p>\n<pre><code class=\"language-php\">{ red: 5, green: 5, blue: null }\n{ red: 3, green: null, blue: 8 }\n{ red: null, green: 3, blue: 9 }\n{ red: 1, green: 2, blue: 3 }\n{ red: 2, blue: 5 }\n{ red: 3, green: 2 }\n{ red: 4 }\n{ green: 2, blue: 4 }\n{ green: 2 }\n{ blue: 6 }<\/code><\/pre>\n<p>Nehmen wir an, wir wollen eine Abfrage, die nur die Beutel zur\u00fcckgibt, in denen sich rote Murmeln befinden. Das bedeutet, dass wir den booleschen Wert als <code>true<\/code> eingeben m\u00fcssen. Schauen wir uns das mal an:<\/p>\n<pre><code class=\"language-php\">db.bagofmarbles.find( { red: { $exists: true } } )<\/code><\/pre>\n<p>Die Ergebnisse w\u00fcrden aus den Dokumenten bestehen, die das Feld &#8222;rot&#8220; enthalten, auch wenn der Wert <code>null<\/code> w\u00e4re. Allerdings w\u00fcrden sie nicht aus den Dokumenten bestehen, in denen das Feld &#8222;rot&#8220; gar nicht existiert:<\/p>\n<pre><code class=\"language-php\">{ red: 5, green: 5, blue: null }\n{ red: 3, green: null, blue: 8 }\n{ red: null, green: 3, blue: 9 }\n{ red: 1, green: 2, blue: 3 }\n{ red: 2, blue: 5 }\n{ red: 3, green: 2 }\n{ red: 4 }<\/code><\/pre>\n<p>Wenn wir nur die Taschen haben wollen, in denen das Feld &#8222;rote Murmeln&#8220; gar nicht vorkommt, k\u00f6nnen wir die folgende Abfrage eingeben:<\/p>\n<pre><code class=\"language-php\">db.bagofmarbles.find( { red: { $exists: false} )<\/code><\/pre>\n<p>Die Ergebnisse w\u00fcrden aus den Dokumenten bestehen, die das Feld &#8222;rot&#8220; nicht enthalten:<\/p>\n<pre><code class=\"language-php\">{ green: 2, blue: 4 }\n{ green: 2 }\n{ blue: 6 }<\/code><\/pre>\n<h4>$Typ<\/h4>\n<p>Dieser Operator gleicht Dokumente nach dem angegebenen Feldtyp ab. Dies ist n\u00fctzlich, wenn du sehr unstrukturierte Daten hast oder wenn die Datentypen nicht vorhersehbar sind. Diese Feldtypen werden als BSON-Typen angegeben und k\u00f6nnen entweder durch eine Typnummer oder einen Alias definiert werden.<\/p>\n<p>Dies ist die allgemeine Syntax f\u00fcr <code>$type<\/code>:<\/p>\n<pre><code class=\"language-php\">{ field: { $type: &lt;BSON type&gt; } }<\/code><\/pre>\n<p>Nehmen wir an, wir haben ein Adressbuch mit den folgenden Dokumenten:<\/p>\n<pre><code class=\"language-php\">db={\n  addressBook: [\n    {\n      \"_id\": 1,\n      address: \"2100 Jupiter Spot\",\n      zipCode: \"9036325\"\n    },\n    {\n      \"_id\": 2,\n      address: \"25 Moon Place\",\n      zipCode: 26237\n    },\n    {\n      \"_id\": 3,\n      address: \"2324 Neptune Ring\",\n      zipCode: NumberLong(77622222)\n    },\n    {\n      \"_id\": 4,\n      address: \"33 Saturns Moon\",\n      zipCode: NumberInt(117)\n    },\n    {\n      \"_id\": 5,\n      address: \"1044 Venus Lane\",\n      zipCode: [\n        \"99883637232\",\n        \"73488976234\"\n      ]\n    }\n  ]\n}<\/code><\/pre>\n<p>In den oben genannten Dokumenten gibt es f\u00fcr die Postleitzahl verschiedene Datentypen. Dazu geh\u00f6ren Long-, Double-, Integer- und String-Werte.<\/p>\n<p>Wenn wir nur die Dokumente haben wollen, die einen bestimmten Datentyp als Postleitzahl haben &#8211; nehmen wir in diesem Fall String &#8211; m\u00fcssen wir die folgende Abfrage in den Compiler eingeben:<\/p>\n<pre><code class=\"language-php\">db.addressBook.find({\n  \"zipCode\": {\n    $type: \"string\"\n  }\n})<\/code><\/pre>\n<p>Dies w\u00fcrde die folgenden Dokumente zur\u00fcckgeben:<\/p>\n<pre><code class=\"language-php\">[\n  {\n    \"_id\": 1,\n    \"address\": \"2100 Jupiter Spot\",\n    \"zipCode\": \"9036325\"\n  },\n  {\n    \"_id\": 5,\n    \"address\": \"1044 Venus Lane\",\n    \"zipCode\": [\n      \"99883637232\",\n      \"73488976234\"\n    ]\n  }\n]<\/code><\/pre>\n<p>Au\u00dferdem gibt es den Typ &#8222;number&#8220;, der alle Long-, Integer- oder Double-Werte als Array enth\u00e4lt, das ein Element der angegebenen Typen enth\u00e4lt:<\/p>\n<pre><code class=\"language-php\">db.addressBook.find( { \"zipCode\" : { $type : \"number\" } } )<\/code><\/pre>\n<p>Ausgabe:<\/p>\n<pre><code class=\"language-php\">[\n{\n      \"_id\": 2,\n      address: \"25 Moon Place\",\n      zipCode: 26237\n    },\n    {\n      \"_id\": 3,\n      address: \"2324 Neptune Ring\",\n      zipCode: NumberLong(77622222)\n    },\n    {\n      \"_id\": 4,\n      address: \"33 Saturns Moon\",\n      zipCode: NumberInt(117)\n    }\n]<\/code><\/pre>\n<p>Wenn die Dokumente einen Array-Feldtyp haben, gibt der <code>$type<\/code> Operator die Dokumente zur\u00fcck, in denen mindestens ein Array-Element dem Typ entspricht, der dem Operator \u00fcbergeben wurde.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Ab MongoDB 3.6 gibt die Abfrage nach <code>$type: \"array\"<\/code> Dokumente zur\u00fcck, bei denen das Feld selbst ein Array ist. Bei der gleichen Abfrage wurden in den vorherigen Versionen jedoch Dokumente zur\u00fcckgegeben, bei denen das Feld ein Array ist und mindestens ein Element vom Datentyp Array war.<\/p>\n<\/aside>\n\n<h3>Array-Operatoren<\/h3>\n<p>MongoDB verf\u00fcgt auch \u00fcber Array-Operatoren, um Dokumente abzufragen, die Arrays enthalten.<\/p>\n<p>Es gibt drei Hauptoperatoren: <code>$all<\/code>, <code>$elemMatch<\/code> und <code>$size<\/code>. Im Folgenden werden wir jeden einzelnen im Detail besprechen.<\/p>\n<h4>$all<\/h4>\n<p>Der <code>$all<\/code> Operator w\u00e4hlt die Dokumente aus, in denen der Wert eines Feldes ein Array mit den angegebenen Elementen ist:<\/p>\n<pre><code class=\"language-php\">{ : { $all: [ &lt;value1&gt; , &lt;value2&gt; ... ] } }<\/code><\/pre>\n<p>Nehmen wir zum Beispiel an, wir haben eine Sammlung von Dokumenten f\u00fcr ein Bekleidungsgesch\u00e4ft, die unter Inventar folgendes enthalten.<\/p>\n<pre><code class=\"language-php\">{\n   _id: ObjectId(\"5234cc89687ea597eabee675\"),\n   code: \"shirt\",\n   tags: [ \"sale\", \"shirt\", \"button\", \"y2k\", \"casual\" ],\n   qty: [\n          { size: \"S\", num: 10, color: \"blue\" },\n          { size: \"M\", num: 45, color: \"blue\" },\n          { size: \"L\", num: 100, color: \"green\" }\n        ]\n},\n\n{\n   _id: ObjectId(\"5234cc8a687ea597eabee676\"),\n   code: \"pant\",\n   tags: [ \"y2k\", \"trendy\", \"shine\" ],\n   qty: [\n          { size: \"6\", num: 100, color: \"green\" },\n          { size: \"6\", num: 50, color: \"blue\" },\n          { size: \"8\", num: 100, color: \"brown\" }\n        ]\n},\n\n{\n   _id: ObjectId(\"5234ccb7687ea597eabee677\"),\n   code: \"pant2\",\n   tags: [ \"trendy\", \"shine\" ],\n   qty: [\n          { size: \"S\", num: 10, color: \"blue\" },\n          { size: \"M\", num: 100, color: \"blue\" },\n          { size: \"L\", num: 100, color: \"green\" }\n        ]\n},\n\n{\n   _id: ObjectId(\"52350353b2eff1353b349de9\"),\n   code: \"shirt2\",\n   tags: [ \"y2k\", \"trendy\" ],\n   qty: [\n          { size: \"M\", num: 100, color: \"green\" }\n        ]\n}<\/code><\/pre>\n<p>Wir m\u00f6chten alle Dokumente (in diesem Fall die Kleidung) aus dem Inventar abrufen, die mit den Tags &#8222;trendy&#8220; und &#8222;y2k&#8220; verkn\u00fcpft sind. Die folgende Abfrage verwendet den Operator <code>$all<\/code>, wobei der Wert des Feldes tags ein Array ist, dessen Elemente &#8222;y2k&#8220; und &#8222;trendy&#8220; enthalten:<\/p>\n<pre><code class=\"language-php\">db.inventory.find( { tags: { $all: [ \"y2k\", \"trendy\" ] } } )<\/code><\/pre>\n<p>Die obige Abfrage gibt Folgendes zur\u00fcck:<\/p>\n<pre><code class=\"language-php\">{\n   _id: ObjectId(\"5234cc8a687ea597eabee676\"),\n   code: \"pant\",\n   tags: [ \"y2k\", \"trendy\", \"shine\" ],\n   qty: [\n          { size: \"6\", num: 100, color: \"green\" },\n          { size: \"6\", num: 50, color: \"blue\" },\n          { size: \"8\", num: 100, color: \"brown\" }\n        ]\n}\n\n{\n   _id: ObjectId(\"52350353b2eff1353b349de9\"),\n   code: \"shirt2\",\n   tags: [ \"y2k\", \"trendy\" ],\n   qty: [\n          { size: \"M\", num: 100, color: \"green\" }\n        ]\n}<\/code><\/pre>\n<p>Anhand des obigen Beispiels sehen wir auch, dass der <code>$all<\/code> Operator einfach die gleiche Funktion wie die <code>$and<\/code> Operation ausf\u00fchrt.<\/p>\n<p>Alternativ k\u00f6nnten wir auch die folgende Abfrage verwenden, die ein \u00e4hnliches Ergebnis wie die obige liefert:<\/p>\n<pre><code class=\"language-php\">db.inventory.find({\n  $and: [\n    {\n      tags: \"y2k\"\n    },\n    {\n      tags: \"trendy\"\n    }\n  ]\n})<\/code><\/pre>\n<h4>$elemMatch<\/h4>\n<p>Der <code>$elemMatch<\/code> Operator findet Dokumente, die ein Array-Feld mit mindestens einem Element enthalten, das allen angegebenen Abfragekriterien entspricht:<\/p>\n<pre><code class=\"language-php\">{ : { $elemMatch: { &lt;query1&gt;, &lt;query2&gt;, ... } } }<\/code><\/pre>\n<p>W\u00e4hrend wir Vergleichsoperatoren wie <code>$lte<\/code> und <code>$gte<\/code> verwenden k\u00f6nnen, k\u00f6nnen wir, wenn wir nur eine einzige Abfragebedingung innerhalb von <code>$elemMatch<\/code> angeben und weder <code>$not<\/code> noch <code>$ne<\/code> verwenden, <code>$elemMatch<\/code> weglassen, da er im Wesentlichen dieselbe Funktion erf\u00fcllt.<\/p>\n<p>Bei der Verwendung dieses Operators gibt es noch ein paar weitere Dinge zu beachten, vor allem:<\/p>\n<ul>\n<li>Du kannst keinen <code>$where<\/code> Ausdruck in einer <code>$elemMatch<\/code> Operation angeben.<\/li>\n<li>Du kannst keinen <code>$text<\/code> Abfrageausdruck in einer <code>$elemMatch<\/code> Operation angeben.<\/li>\n<\/ul>\n<p>Wir haben zum Beispiel die folgenden Dokumente in der Sammlung der Sch\u00fclerergebnisse:<\/p>\n<pre><code class=\"language-php\">{ _id: 1, results: [ 92, 89, 98 ] }\n{ _id: 2, results: [ 85, 99, 99 ] }<\/code><\/pre>\n<p>Die folgende Abfrage findet nur die Dokumente, bei denen das Ergebnisfeld mindestens ein Element enth\u00e4lt, das gr\u00f6\u00dfer oder gleich 90 und kleiner als 95 ist:<\/p>\n<pre><code class=\"language-php\">db.studentresults.find(  { results: { $elemMatch: { $gte: 90, $lt: 95 } } })<\/code><\/pre>\n<p>Unsere Abfrage gibt das folgende Dokument zur\u00fcck, da das Element 92 sowohl gr\u00f6\u00dfer oder gleich 90 als auch kleiner als 95 ist:<\/p>\n<pre><code class=\"language-php\">{ \"_id\" : 1, \"results\" :[ 92, 89, 98 ] }<\/code><\/pre>\n<h4>$size<\/h4>\n<p>Der <code>$size<\/code> Operator gibt die Dokumente zur\u00fcck, bei denen die Gr\u00f6\u00dfe des Arrays mit der Anzahl der im Argument angegebenen Elemente \u00fcbereinstimmt:<\/p>\n<pre><code class=\"language-php\">{ field: { $size: value } }<\/code><\/pre>\n<p>Hier ist ein Beispiel:<\/p>\n<pre><code class=\"language-php\">db.collection.find( { field: { $size: 2 } });<\/code><\/pre>\n<p>Dies w\u00fcrde alle Dokumente in der angegebenen Sammlung zur\u00fcckgeben, bei denen das Feld ein Array mit 2 Elementen ist: <code>{ field: [ orange, apple] }<\/code> und <code>{ field: [ blue, red] }<\/code>, aber nicht <code>{ field: blue}<\/code> oder <code>{ field: [ raspberry, lemon, grapefruit ] }<\/code>.<\/p>\n<p>Wir k\u00f6nnen zwar einen bestimmten Wert als Gr\u00f6\u00dfe eingeben, aber wir k\u00f6nnen keine Wertebereiche als Gr\u00f6\u00dfe angeben.<\/p>\n<h3>Geospatiale Operatoren<\/h3>\n<p>MongoDB erm\u00f6glicht es dir, Geodaten in Form von GeoJSON-Typen zu speichern. GeoJSON ist ein auf der JavaScript-Objektnotation basierendes, offenes Standardformat, das geografische Merkmale darstellen kann und nicht-r\u00e4umliche Attribute unterst\u00fctzt. Es gibt zwei Arten von GeoJSON-Operatoren, \u00fcber die wir in diesem Artikel sprechen werden: Geometriespezifizierer und Abfrageselektoren.<\/p>\n<h4>$geometry<\/h4>\n<p>Dieser Operator gibt die GeoJSON-Geometrie f\u00fcr die Verwendung mit den folgenden Geodatenabfrageoperatoren an: <code>$geoIntersects<\/code> <code>$geoWithin<\/code> ,<code>$nearSphere<\/code> und <code>$near<\/code>. <code>$geometry<\/code> verwendet EPSG:4326 als Standard-Koordinatenreferenzsystem (CRS).<\/p>\n<p>Um GeoJSON-Objekte mit dem Standard-CRS anzugeben, kannst du das folgende Snippet f\u00fcr <code>$geometry<\/code> verwenden:<\/p>\n<pre><code class=\"language-php\">$geometry: {\n   type: \"&lt;GeoJSON object type&gt;\",\n   coordinates: [ &lt;coordinates&gt; ]\n}<\/code><\/pre>\n<p>Um ein einfaches GeoJSON-Polygon mit einem ma\u00dfgeschneiderten MongoDB-CRS zu erw\u00e4hnen, kannst du das folgende Snippet verwenden (du kannst es nur f\u00fcr <code>$geoWithin<\/code> und <code>$geoIntersects<\/code> verwenden):<\/p>\n<pre><code class=\"language-php\">$geometry: {\n   type: \"Polygon\",\n   coordinates: [ &lt;coordinates&gt; ],\n   crs: {\n      type: \"name\",\n      properties: { name: \"urn:x-mongodb:crs:strictwinding:EPSG:4326\" }\n   }\n}<\/code><\/pre>\n<h4>$polygon<\/h4>\n<p>Der <code>$polygon<\/code> Operator kann verwendet werden, um ein Polygon f\u00fcr eine GeoJSON <code>$geoWithin<\/code> Abfrage auf Legacy-Koordinatenpaare anzugeben. Diese Abfrage gibt dann Paare zur\u00fcck, die innerhalb der Grenzen des Polygons liegen. <code> $polygon<\/code> wird jedoch keine GeoJSON-Objekte abfragen. Um ein Polygon zu definieren, musst du ein Array von Koordinatenpunkten wie folgt angeben:<\/p>\n<pre><code class=\"language-php\">{\n   : {\n      $geoWithin: {\n         $polygon: [ [ &lt;x1&gt; , &lt;y1&gt; ], [ &lt;x2&gt; , &lt;y2&gt; ], [ &lt;x3&gt; , &lt;y3&gt; ], ... ]\n      }\n   }\n}<\/code><\/pre>\n<p>Hier ist der letzte Punkt implizit mit dem ersten verbunden. Du kannst so viele Punkte oder Seiten angeben, wie du m\u00f6chtest.<\/p>\n<p>Die folgende Abfrage gibt zum Beispiel alle Dokumente zur\u00fcck, deren Koordinaten innerhalb des Polygons liegen, das durch [0,0], [1,5] und [3,3] definiert ist:<\/p>\n<pre><code class=\"language-php\">db.places.find(\n  {\n     loc: {\n       $geoWithin: { $polygon: [ [ 0 , 0 ], [ 1 , 5 ], [ 3 , 3 ] ] }\n     }\n  }\n)<\/code><\/pre>\n<h4>$geoWithin<\/h4>\n<p>Dieser Operator kann verwendet werden, um Dokumente mit Geodaten auszuw\u00e4hlen, die vollst\u00e4ndig in einem bestimmten Shape enthalten sind. Die angegebene Form kann entweder ein GeoJSON-Multipolygon, ein GeoJSON-Polygon (entweder mit mehreren Ringen oder mit einem Ring) oder eine Form sein, die durch Legacy-Koordinatenpaare definiert werden kann.<\/p>\n<p>Der <code>$geoWithin<\/code> Operator nutzt den <code>$geometry<\/code> Operator, um das GeoJSON Objekt zu erw\u00e4hnen.<\/p>\n<p>Um GeoJSON-Multipolygone oder Polygone \u00fcber das Standard-Koordinatenreferenzsystem (CRS) anzugeben, kannst du die folgende Syntax verwenden:<\/p>\n<pre><code class=\"language-php\">{\n   : {\n      $geoWithin: {\n         $geometry: {\n            type: &lt;\"Polygon\" or \"MultiPolygon\"&gt; ,\n            coordinates: [ &lt;coordinates&gt; ]\n         }\n      }\n   }\n}<\/code><\/pre>\n<p>Bei <code>$geoWithin<\/code> Abfragen, die GeoJSON-Geometrien mit Fl\u00e4chen gr\u00f6\u00dfer als eine einzelne Halbkugel erw\u00e4hnen, w\u00fcrde die Verwendung des Standard-CRS zu Abfragen f\u00fcr die komplement\u00e4ren Geometrien f\u00fchren.<\/p>\n<p>Um ein einzelnes GeoJSON-Polygon mit einem benutzerdefinierten MongoDB-CRS zu erw\u00e4hnen, kannst du den unten genannten Prototyp in der <code>$geometry<\/code> Expression verwenden:<\/p>\n<pre><code class=\"language-php\">{\n   : {\n      $geoWithin: {\n         $geometry: {\n           type: \"Polygon\" ,\n           coordinates: [ &lt;coordinates&gt; ],\n           crs: {\n              type: \"name\",\n              properties: { name: \"urn:x-mongodb:crs:strictwinding:EPSG:4326\" }\n           }\n         }\n      }\n   }\n}<\/code><\/pre>\n<p>Das folgende Beispiel w\u00e4hlt alle Ortsdaten aus, die vollst\u00e4ndig innerhalb eines GeoJSON-Polygons liegen, wobei die Fl\u00e4che des Polygons kleiner als die Fl\u00e4che einer einzelnen Halbkugel ist:<\/p>\n<pre><code class=\"language-php\">db.places.find(\n   {\n     loc: {\n       $geoWithin: {\n          $geometry: {\n             type : \"Polygon\" ,\n             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ]\n          }\n       }\n     }\n   }\n)<\/code><\/pre>\n<h4>$box<\/h4>\n<p>Mit <code>$box<\/code> kannst du ein Rechteck f\u00fcr eine GeoJSON-Abfrage <code>$geoWithin<\/code> angeben, um Dokumente zu finden, die sich innerhalb der Grenzen des Rechtecks befinden, entsprechend ihrer punktbasierten Standortdaten. Wenn du <code>$geoWithin<\/code> mit <code>$box<\/code> verwendest, erh\u00e4ltst du Dokumente, die auf den Koordinaten der Abfrage basieren. In diesem Szenario wird <code>$geoWithin<\/code> keine GeoJSON Shapes abfragen.<\/p>\n<p>Um den <code>$box<\/code> Operator zu nutzen, musst du die obere rechte und untere linke Ecke des Rechtecks in einem Array-Objekt angeben:<\/p>\n<pre><code class=\"language-php\">{ &lt;location field&gt; : { $geoWithin: { $box: [ [ &lt;bottom left coordinates&gt; ],\n [ &lt;upper right coordinates&gt; ] ] } } }<\/code><\/pre>\n<p>Die oben genannte Abfrage berechnet die Entfernung unter Verwendung der planaren (flachen) Geometrie. Die folgende Abfrage gibt alle Dokumente zur\u00fcck, die sich innerhalb des Rechtecks mit den Punkten: [0,0], [0,30], [30,0], [30,30]:<\/p>\n<pre><code class=\"language-php\">db.places.find ( { \n loc: { $geoWithin: { $box: [ [ 0,0 ], [ 30,30 ] ] } }\n} )<\/code><\/pre>\n<h4>$nearSphere<\/h4>\n<p>Du kannst <code>$nearSphere<\/code> verwenden, um einen Punkt zu nennen, f\u00fcr den eine Geodatenabfrage die Dokumente von der n\u00e4chsten bis zur weitesten Entfernung zur\u00fcckgibt.<\/p>\n<p>MongoDB verwendet sph\u00e4rische Geometrie, um die Entfernungen f\u00fcr <code>$nearSphere<\/code> zu berechnen. Dazu wird ein Geodatenindex wie folgt ben\u00f6tigt:<\/p>\n<ol>\n<li>2d-Index f\u00fcr Standortdaten, die als alte Koordinatenpaare beschrieben sind. Um einen 2D-Index f\u00fcr GeoJSON-Punkte zu nutzen, musst du den Index f\u00fcr das Koordinatenfeld des GeoJSON-Objekts erstellen.<\/li>\n<li>2dsphere-Index f\u00fcr Ortsdaten, die als GeoJSON-Punkte beschrieben sind.<\/li>\n<\/ol>\n<p>Um einen GeoJSON-Punkt zu erw\u00e4hnen, kannst du die folgende Syntax verwenden:<\/p>\n<pre><code class=\"language-php\">{\n  $nearSphere: {\n     $geometry: {\n        type : \"Point\",\n        coordinates : [ &lt;longitude&gt;, &lt;latitude&gt; ]\n     },\n     $minDistance: &lt;distance in meters&gt;,\n     $maxDistance: &lt;distance in meters&gt; \n  }\n}<\/code><\/pre>\n<p>Hier sind <code>$minDistance<\/code> und <code>$maxDistance<\/code> optional. <code>$minDistance<\/code> kann die Ergebnisse auf die Dokumente beschr\u00e4nken, die mindestens die angegebene Entfernung vom Zentrum haben. Du kannst <code>$maxDistance<\/code> f\u00fcr beide Indizes verwenden.<\/p>\n<p>Betrachte nun eine Sammlung von &#8222;Orten&#8220;, die aus Dokumenten mit einem Ortsfeld besteht, das einen 2dsphere-Index hat. Das folgende Beispiel w\u00fcrde die Punkte zur\u00fcckgeben, die mindestens 2.000 Meter und h\u00f6chstens 6.000 Meter von dem von dir gew\u00e4hlten Punkt entfernt sind, und zwar in der Reihenfolge vom n\u00e4chsten zum weitesten Punkt:<\/p>\n<pre><code class=\"language-php\">db.places.find(\n   {\n     location: {\n        $nearSphere: {\n           $geometry: {\n              type : \"Point\",\n              coordinates : [ -43.9532, 50.32 ]\n           },\n           $minDistance: 2000,\n           $maxDistance: 6000\n        }\n     }\n   }\n)<\/code><\/pre>\n<h4>$geoIntersects<\/h4>\n<p>Mit dem <code>$geoIntersects<\/code> Operator kannst du Dokumente ausw\u00e4hlen, deren Geodaten sich mit einem bestimmten GeoJSON-Objekt \u00fcberschneiden (d.h. bei denen die Konvergenz des angegebenen Objekts und der Daten nicht leer ist). Er nutzt den <code>$geometry<\/code> Operator, um das GeoJSON-Objekt anzugeben.<\/p>\n<p>Um GeoJSON-Multipolygone oder Polygone durch das Standard-Koordinatenreferenzsystem (CRS) zu erw\u00e4hnen, kannst du die folgende Syntax verwenden:<\/p>\n<pre><code class=\"language-php\">{ &lt;location field&gt;: {\n     $geoIntersects: {\n        $geometry: {\n           type: \"&lt;GeoJSON object type&gt;\" ,\n           coordinates: [ &lt;coordinates&gt; ]\n        }\n     }\n  }\n}<\/code><\/pre>\n<p>Die folgende Instanz verwendet <code>$geoIntersects<\/code>, um alle Ortsdaten auszuw\u00e4hlen, die sich mit dem durch das Koordinatenarray beschriebenen Polygon schneiden:<\/p>\n<pre><code class=\"language-php\">db.places.find(\n   {\n     loc: {\n       $geoIntersects: {\n          $geometry: {\n             type: \"Polygon\" ,\n             coordinates: [\n               [ [ 0, 0 ], [ 2, 6 ], [ 4, 1 ], [ 0, 0 ] ]\n             ]\n          }\n       }\n     }\n   }\n)<\/code><\/pre>\n<h4>$center<\/h4>\n<p>Der <code>$center<\/code> Operator nennt einen Kreis f\u00fcr eine <code>$geoWithin<\/code> Abfrage, die die alten Koordinatenpaare zur\u00fcckgibt, die innerhalb der Grenzen des Kreises liegen.<\/p>\n<p><code>$center<\/code> gibt keine GeoJSON-Objekte zur\u00fcck. Um den <code>$center<\/code> Operator zu nutzen, musst du ein Array angeben, das folgendes enth\u00e4lt:<\/p>\n<ol>\n<li>Den Radius des Kreises, gemessen in den Einheiten, die das Koordinatensystem verwendet.<\/li>\n<li>Die Gitterkoordinaten des Mittelpunkts des Kreises.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">{\n  &lt;location field&gt; : {\n      $geoWithin: { $center: [ [ &lt;x&gt; , &lt;y&gt; ] , &lt;radius&gt; ] }\n   }\n}<\/code><\/pre>\n<p>Das folgende Beispiel gibt alle Dokumente zur\u00fcck, deren Koordinaten sich innerhalb des Kreises mit dem Mittelpunkt [2,3] und dem Radius 40 befinden:<\/p>\n<pre><code class=\"language-php\">db.places.find(\n   { loc: { $geoWithin: { $center: [ [2, 3], 40 ] } } }\n)<\/code><\/pre>\n<h3>Projektionsoperatoren<\/h3>\n<p>Du kannst Projektionsoperatoren verwenden, um die Felder zu nennen, die von einer Operation zur\u00fcckgegeben werden. MongoDB Projektionsoperatoren erm\u00f6glichen es, die Funktion <code>find()<\/code> mit Argumenten zur Datenfilterung zu verwenden. Dies hilft den Nutzern, nur die ben\u00f6tigten Datenfelder aus einem Dokument zu extrahieren. So kannst du transparente und \u00fcbersichtliche Daten projizieren, ohne die Gesamtleistung der Datenbank zu beeintr\u00e4chtigen.<\/p>\n<h4>$elemMatch (Projektion)<\/h4>\n<p>Der <code>$elemMatch<\/code> Operator ist daf\u00fcr verantwortlich, den Inhalt eines Feldes aus den Abfrageergebnissen so einzuschr\u00e4nken, dass es nur das erste Element enth\u00e4lt, das der <code>$elemMatch<\/code> Bedingung entspricht.<\/p>\n<p>Hier sind ein paar Dinge, die du beachten musst, bevor du <code>$elemMatch<\/code> verwendest:<\/p>\n<ul>\n<li>Ab MongoDB 4.4 gibt die <code>$elemMatch<\/code> Projektion eines bestehenden Feldes unabh\u00e4ngig von der Reihenfolge der Felder im Dokument das Feld nach der Einbeziehung anderer bestehender Felder zur\u00fcck.<\/li>\n<li>Sowohl der <code>$elemMatch<\/code> als auch der <code>$<\/code> Operator projizieren das erste \u00fcbereinstimmende Element aus einem Array, das auf einer bestimmten Bedingung basiert. Der <code>$<\/code> Operator w\u00fcrde das erste \u00fcbereinstimmende Array-Element aus jedem Dokument in einer Sammlung auf der Grundlage einer Bedingung aus der Abfrageanweisung projizieren, w\u00e4hrend der <code>$elemMatch<\/code> Projektionsoperator ein explizites Bedingungsargument ben\u00f6tigt. So kannst du auf der Grundlage einer Bedingung projizieren, die nicht in der Abfrage enthalten ist, oder wenn du auf der Grundlage verschiedener Felder in den eingebetteten Dokumenten des Arrays projizieren musst.<\/li>\n<\/ul>\n<p>Du solltest au\u00dferdem die folgenden Einschr\u00e4nkungen beachten, bevor du den <code>$elemMatch<\/code> Operator auf deine Daten anwendest:<\/p>\n<ul>\n<li>Du kannst einen <code>$text<\/code> Abfrageausdruck nicht innerhalb eines <code>$elemMatch<\/code> Operators erw\u00e4hnen.<\/li>\n<li><code>db.collection.find()<\/code> operationen auf Ansichten unterst\u00fctzen den <code>$elemMatch<\/code> Projektionsoperator nicht.<\/li>\n<\/ul>\n<p>Das folgende Beispiel f\u00fcr den <code>$elemMatch<\/code> Projektionsoperator geht von einer Sammlung <code>schools<\/code> mit den folgenden Dokumenten aus:<\/p>\n<pre><code class=\"language-php\">{\n _id: 1,\n zipcode: \"63108\",\n students: [\n              { name: \"mark\", school: 102, age: 9 },\n              { name: \"geoff\", school: 101, age: 13 },\n              { name: \"frank\", school: 104, age: 12 }\n           ]\n}\n{\n _id: 2,\n zipcode: \"63110\",\n students: [\n              { name: \"harry\", school: 103, age: 14 },\n              { name: \"george\", school: 103, age: 7 },\n           ]\n}\n{\n _id: 3,\n zipcode: \"63108\",\n students: [\n              { name: \"harry\", school: 103, age: 14 },\n              { name: \"george\", school: 103, age: 7 },\n           ]\n}\n{\n _id: 4,\n zipcode: \"63110\",\n students: [\n              { name: \"jim\", school: 103, age: 9 },\n              { name: \"michael\", school: 103, age: 12 },\n           ]\n}<\/code><\/pre>\n<p>In diesem Fall sucht die Operation <code>find()<\/code> nach allen Dokumenten, bei denen der Wert des Feldes Postleitzahl 63110 ist. Die <code>$elemMatch<\/code> Projektion w\u00fcrde nur das erste \u00fcbereinstimmende Element des <code>students<\/code> Arrays zur\u00fcckgeben, in dem das Feld <code>school<\/code> den Wert 103 hat:<\/p>\n<pre><code class=\"language-php\">db.schools.find( { zipcode: \"63110\" },\n                 { students: { $elemMatch: { school: 103 } } } )<\/code><\/pre>\n<p>So w\u00fcrde das Ergebnis aussehen:<\/p>\n<pre><code class=\"language-php\">{ \"_id\" : 2, \"students\" : [ { \"name\" : \"harry\", \"school\" : 103, \"age\" : 14 } ] }\n{ \"_id\" : 4, \"students\" : [ { \"name\" : \"jim\", \"school\" : 103, \"age\" : 9 } ] }<\/code><\/pre>\n<h4>$slice (Projektion)<\/h4>\n<p>Der <code>$slice<\/code> Projektionsoperator kann verwendet werden, um die Anzahl der Elemente in einem Array anzugeben, die im Abfrageergebnis zur\u00fcckgegeben werden sollen:<\/p>\n<pre><code class=\"language-php\">db.collection.find(\n   &lt;query&gt; ,\n   { &lt;arrayField&gt; : { $slice: &lt;number&gt; } }\n);<\/code><\/pre>\n<p>Er kann auch folgenderma\u00dfen ausgedr\u00fcckt werden:<\/p>\n<pre><code class=\"language-php\">db.collection.find(\n  &lt;query&gt; ,\n   { &lt;arrayField&gt; : { $slice: [ &lt;number&gt; , &lt;number&gt; ] } }\n);<\/code><\/pre>\n<p>Um das zu demonstrieren, kannst du eine Beispielsammlung von Tweets mit den folgenden Dokumenten erstellen:<\/p>\n<pre><code class=\"language-php\">db.posts.insertMany([\n   {\n     _id: 1,\n     title: \"Nuts are not blueberries.\",\n     comments: [ { comment: \"0. true\" }, { comment: \"1. blueberries aren't nuts.\"} ]\n   },\n   {\n     _id: 2,\n     title: \"Coffee please.\",\n     comments: [ { comment: \"0. Indubitably\" }, { comment: \"1. Cuppa tea please\" }, { comment: \"2. frappucino\" }, { comment: \"3. Mocha latte\" }, { comment: \"4. whatever\" } ]\n   }\n])<\/code><\/pre>\n<p>Die folgende Operation w\u00fcrde den <code>$slice<\/code> Projektionsoperator auf das Array tweets anwenden, um das Array mit seinen ersten beiden Elementen zur\u00fcckzugeben. Wenn ein Array weniger als zwei Elemente enth\u00e4lt, werden alle Elemente des Arrays zur\u00fcckgegeben:<\/p>\n<pre><code class=\"language-php\">db.posts.find( {}, { comments: { $slice: 2 } } )<\/code><\/pre>\n<p>Diese Operation w\u00fcrde die folgenden Dokumente zur\u00fcckgeben:<\/p>\n<pre><code class=\"language-php\">{\n   \"_id\" : 1,\n   \"title\" : \"Nuts are not blueberries.\",\n   \"comments\" : [ { \"comment\" : \"0. true\" }, { \"comment\" : \"1. blueberries aren't nuts.\" } ]\n}\n{\n   \"_id\" : 2,\n   \"title\" : \"Coffee please.\",\n   \"comments\" : [ { \"comment\" : \"0. Indubitably\" }, { \"comment\" : \"1. Cuppa tea please\" } ]\n}<\/code><\/pre>\n<h4>$ (Projektion)<\/h4>\n<p>Der Positionsoperator <code>$<\/code> schr\u00e4nkt den Inhalt eines Arrays ein und gibt das erste Element zur\u00fcck, das der Abfragebedingung des Arrays entspricht. Du kannst <code>$<\/code> im Projektionsdokument der Methode <code>find()<\/code> oder der Methode <code>findOne()<\/code> verwenden, wenn du nur ein bestimmtes Array-Element in ausgew\u00e4hlten Dokumenten ben\u00f6tigst.<\/p>\n<p>So sieht die Syntax f\u00fcr den <code>$<\/code> Operator aus:<\/p>\n<pre><code class=\"language-php\">db.collection.find( { &lt;array&gt;: &lt;condition&gt; ... },\n                    { \"&lt;array&gt;.$\": 1 } )\ndb.collection.find( { &lt;array.field&gt;: &lt;condition&gt; ...},\n                    { \"&lt;array&gt;.$\": 1 } )<\/code><\/pre>\n<p>In diesem Beispiel besteht die Sammlung <code>students<\/code> aus den folgenden Dokumenten:<\/p>\n<pre><code class=\"language-php\">{ \"_id\" : 1, \"semester\" : 2, \"grades\" : [ 75, 67, 93 ] }\n{ \"_id\" : 2, \"semester\" : 2, \"grades\" : [ 60, 68, 72 ] }\n{ \"_id\" : 3, \"semester\" : 2, \"grades\" : [ 95, 82, 67 ] }\n{ \"_id\" : 4, \"semester\" : 3, \"grades\" : [ 89, 95, 70 ] }\n{ \"_id\" : 5, \"semester\" : 3, \"grades\" : [ 68, 98, 82 ] }\n{ \"_id\" : 6, \"semester\" : 3, \"grades\" : [ 65, 70, 76 ] }<\/code><\/pre>\n<p>In der folgenden Abfrage gibt die Projektion <code>{ \"grades.$\": 1 }<\/code> nur das erste Element zur\u00fcck, das gr\u00f6\u00dfer oder gleich 89 f\u00fcr das Feld <code>grades<\/code> ist:<\/p>\n<pre><code class=\"language-php\">db.students.find( { semester: 2, grades: { $gte: 89 } },\n                  { \"grades.$\": 1 } )<\/code><\/pre>\n<p>Dieser Vorgang gibt die folgenden Dokumente zur\u00fcck:<\/p>\n<pre><code class=\"language-php\">{\"_id\": 1, \"grades\": [93] }<\/code><\/pre>\n<h3>Auswertungsoperatoren<\/h3>\n<p>Du kannst die MongoDB-Auswertungsoperatoren nutzen, um die gesamte Datenstruktur oder einzelne Felder in einem Dokument zu beurteilen.<\/p>\n<p>Schauen wir uns einige g\u00e4ngige MongoDB-Auswertungsoperatoren an.<\/p>\n<h4>$mod<\/h4>\n<p>Mit diesem Operator kannst du Dokumente abgleichen, bei denen der Wert eines bestimmten Feldes gleich dem Rest ist, nachdem er durch einen bestimmten Wert geteilt wurde:<\/p>\n<pre><code class=\"language-php\">{ field: { $mod: [ divisor, remainder ] } }<\/code><\/pre>\n<p>Angenommen, du hast eine Tabelle mit Autos verschiedener Marken, die du in deinem Ausstellungsraum besitzt. Die folgende Abfrage w\u00fcrde dir alle Automarken liefern, deren Bestandsnummern ein Vielfaches von 250 sind.<\/p>\n<pre><code class=\"language-php\">db.cars.find ( { qty: { $mod: [ 250,0 ] } } )<\/code><\/pre>\n<h4>$jsonSchema<\/h4>\n<p>Mit <code>$jsonSchema<\/code> kannst du die Dokumente abgleichen, die mit dem angegebenen JSON-Schema \u00fcbereinstimmen. Die MongoDB-Implementierung des JSON-Schemas enth\u00e4lt zus\u00e4tzlich das Schl\u00fcsselwort <code>bsonType<\/code>, mit dem du alle BSON-Typen innerhalb des <code>$jsonSchema<\/code> -Operators verwenden kannst.<\/p>\n<p><code>bsonType<\/code> kann die gleichen String-Aliase akzeptieren, die du auch f\u00fcr den <code>type<\/code> Operator verwendest. So w\u00fcrde die Syntax von <code>$jsonSchema<\/code> aussehen:<\/p>\n<pre><code class=\"language-php\">{ $jsonSchema: &lt;JSON Schema object&gt; }<\/code><\/pre>\n<p>Hier wird das JSON-Schema-Objekt auf der Grundlage des <a href=\"https:\/\/tools.ietf.org\/html\/draft-zyp-json-schema-04\">Draft 4 des JSON-Schema-Standards<\/a> formatiert:<\/p>\n<pre><code class=\"language-php\">{ &lt;keyword1&gt;: &lt;value1&gt;, ... }<\/code><\/pre>\n<p>Hier ist ein Beispiel, das zeigt, wie <code>$jsonSchema<\/code> funktioniert:<\/p>\n<pre><code class=\"language-php\">{ $jsonSchema: {\n     required: [ \"name\", \"major\", \"gpa\", \"address\" ],\n     properties: {\n        name: {\n           bsonType: \"string\",\n           description: \"must be a string and is required\"\n        },\n        address: {\n           bsonType: \"object\",\n           required: [ \"zipcode\" ],\n           properties: {\n               \"street\": { bsonType: \"string\" },\n               \"zipcode\": { bsonType: \"string\" }\n           }\n        }\n     }\n  }\n}<\/code><\/pre>\n<p>Du kannst <code>$jsonSchema<\/code> auch in einem Dokumentenvalidator verwenden, um das angegebene Schema bei Aktualisierungs- und Einf\u00fcgevorg\u00e4ngen durchzusetzen:<\/p>\n<pre><code class=\"language-php\">db.createCollection(&lt;collection&gt; , { validator: { $jsonSchema: &lt;schema&gt; } } )\ndb.runCommand( { collMod: &lt;collection&gt;, validator:{ $jsonSchema: &lt;schema&gt; } } )<\/code><\/pre>\n<p>Beachte, dass es einige Dinge gibt, die der <code>$jsonSchema<\/code> Operator nicht unterst\u00fctzt:<\/p>\n<ol>\n<li>Der Integer-Typ. Du musst den BSON-Typ long oder int mit dem Schl\u00fcsselwort bsonType nutzen.<\/li>\n<li>Unbekannte Schl\u00fcsselw\u00f6rter.<\/li>\n<li>Verkn\u00fcpfungseigenschaften und die Hypermedia des JSON-Schemas sowie die Verwendung von JSON-Referenzen und JSON-Zeigern.<\/li>\n<\/ol>\n<h4>$Text<\/h4>\n<p>Der <code>$text<\/code> Operator sucht nach einem Text innerhalb des Inhalts des angegebenen Feldes, der mit einem Textindex indiziert ist:<\/p>\n<pre><code class=\"language-php\">{  \n  $text:  \n    {  \n      $search: &lt;string&gt;,  \n      $language: &lt;string&gt;,  \n      $caseSensitive: &lt;boolean&gt;,  \n      $diacriticSensitive: &lt;boolean&gt;   \n    }  \n}<\/code><\/pre>\n<p>In diesem Fall durchforstet der folgende Codeschnipsel die Tabelle, um alle Autos herauszufiltern, die den Text &#8222;Porsche&#8220; enthalten:<\/p>\n<pre><code class=\"language-php\">db.cars.find( { $text: { $search: \"Porsche\" } } )<\/code><\/pre>\n<h4>$regex<\/h4>\n<p>Der Operator <code>$regex<\/code> bietet regul\u00e4re Ausdr\u00fccke, um Zeichenfolgen in Abfragen nach Mustern abzugleichen. MongoDB nutzt regul\u00e4re Ausdr\u00fccke, die mit Perl kompatibel sind:<\/p>\n<pre><code class=\"language-php\">{&lt;field&gt; : \/pattern\/ &lt;options&gt;}<\/code><\/pre>\n<p>Das folgende Beispiel w\u00fcrde helfen, alle Autos herauszufiltern, die die Zeichenfolge &#8222;$78900&#8220; enthalten:<\/p>\n<pre><code class=\"language-php\">db.cars.find( { price: { $regex: \/$78900\/ } } )<\/code><\/pre>\n<h4>$expr<\/h4>\n<p>Der <code>$expr<\/code> Operator erm\u00f6glicht es dir, Aggregationsausdr\u00fccke in der Abfragesprache zu nutzen:<\/p>\n<pre><code class=\"language-php\">{ $expr: { &lt;expression&gt; } }<\/code><\/pre>\n<p>Du kannst auch <code>$expr<\/code> verwenden, um Abfrageausdr\u00fccke zu erstellen, die Felder aus demselben Dokument in einer <code>$match<\/code> Stufe vergleichen. Wenn die <code>$match<\/code> Stufe Teil einer <code>$lookup<\/code> Stufe ist, kann <code>$expr<\/code> Felder mit Hilfe von let-Variablen vergleichen.<\/p>\n<h4>$where<\/h4>\n<p>Du kannst den <code>$where<\/code> Operator nutzen, um entweder einen String mit einer vollst\u00e4ndigen JavaScript-Funktion oder einen JavaScript-Ausdruck an das Abfragesystem zu \u00fcbergeben. Der <code>$where<\/code> Operator bietet mehr Flexibilit\u00e4t, aber die Datenbank muss die JavaScript-Funktion oder den Ausdruck f\u00fcr jedes Dokument in der Sammlung verarbeiten. Du kannst dieses Dokument in der JavaScript-Funktion oder dem Ausdruck referenzieren, indem du entweder <code>obj<\/code> oder <code>this<\/code> verwendest.<\/p>\n<p>Hier ist ein Beispiel f\u00fcr die Syntax:<\/p>\n<pre><code class=\"language-php\">{ $where: &lt;string|JavaScript Code&gt; }<\/code><\/pre>\n<p>Bevor wir uns mit einem Beispiel f\u00fcr den <code>$where<\/code> Operator besch\u00e4ftigen, gibt es einige wichtige Punkte zu beachten:<\/p>\n<ul>\n<li>Du solltest den <code>$where<\/code> Abfrageoperator nur f\u00fcr Dokumente der obersten Ebene verwenden. Der <code>$where<\/code> Abfrageoperator funktioniert nicht in einem verschachtelten Dokument, wie bei einer <code>$elemMatch<\/code> Abfrage.<\/li>\n<li>Im Allgemeinen solltest du <code>$where<\/code> nur verwenden, wenn du deine Abfrage nicht mit einem anderen Operator ausdr\u00fccken kannst. Wenn du <code>$where<\/code> verwenden musst, stelle sicher, dass du mindestens einen anderen Standard-Abfrageoperator verwendest, um die Ergebnismenge zu filtern. Die unabh\u00e4ngige Verwendung von <code>$where<\/code> erfordert f\u00fcr eine ordnungsgem\u00e4\u00dfe Ausf\u00fchrung eine Sammelabfrage.<\/li>\n<\/ul>\n<p>Hier ist ein Beispiel, um das zu verdeutlichen:<\/p>\n<pre><code class=\"language-php\">db.cars.find( { $where: function() {  \n   return (hex_md5(this.name)== \"9a43e617b50cd379dca1bc6e2a8\")  \n} } );<\/code><\/pre>\n<h3>Bitweise Operatoren<\/h3>\n<p>Bitwise-Operatoren geben Daten auf der Grundlage von Bit-Positionsbedingungen zur\u00fcck. Einfach ausgedr\u00fcckt: Sie werden verwendet, um numerische oder bin\u00e4re Werte abzugleichen, bei denen jedes Bit aus einer Reihe von Bitpositionen den Wert 1 oder 0 hat.<\/p>\n<h4>$bitsAllSet<\/h4>\n<p>Dieser Operator findet alle Dokumente, bei denen alle in der Abfrage angegebenen Bitpositionen im Feld gesetzt (d.h. 1) sind:<\/p>\n<pre><code class=\"language-php\">{ &lt;field&gt; : { $bitsAllSet: &lt;numeric bitmask&gt; } }<\/code><\/pre>\n<pre><code class=\"language-php\">{ &lt;field&gt; : { $bitsAllSet: &lt; BinData bitmask&gt; } }<\/code><\/pre>\n<pre><code class=\"language-php\">{ &lt;field&gt; : { $bitsAllSet: [ &lt;position1&gt; , &lt;position2&gt; , ... ] } }<\/code><\/pre>\n<p>Der Feldwert sollte entweder eine BinData-Instanz oder numerisch sein, damit <code>$bitsAllSet<\/code> mit dem aktuellen Dokument \u00fcbereinstimmt.<\/p>\n<p>Im folgenden Beispiel nutzen wir eine Sammlung mit den folgenden Dokumenten:<\/p>\n<pre><code class=\"language-php\">db.collection.save({ _id: 1, a: 54, binaryValueofA: \"00110110\" })\ndb.collection.save({ _id: 2, a: 20, binaryValueofA: \"00010100\" })\ndb.collection.save({ _id: 3, a: 20.0, binaryValueofA: \"00010100\" })\ndb.collection.save({ _id: 4, a: BinData(0, \"Zg==\"), binaryValueofA: \"01100110\" })<\/code><\/pre>\n<p>Die unten stehende Abfrage verwendet den Operator <code>$bitsAllSet<\/code>, um zu pr\u00fcfen, ob das Feld a Bits an Position 1 und Position 5 hat, wobei das niedrigstwertige Bit an Position 0 w\u00e4re:<\/p>\n<pre><code class=\"language-php\">db.collection.find( { a: { $bitsAllSet: [ 1, 5 ] } })<\/code><\/pre>\n<p>Diese Abfrage w\u00fcrde mit den folgenden Dokumenten \u00fcbereinstimmen:<\/p>\n<pre><code class=\"language-php\">{ \"_id\" : 1, \"a\" : 54, \"binaryValueofA\" : \"00110110\" }\n{ \"_id\" : 4, \"a\" : BinData(0,\"Zg==\"), \"binaryValueofA\" : \"01100110\" }<\/code><\/pre>\n<h4>$bitsAllClear<\/h4>\n<p>Der Operator <code>$bitsAllClear<\/code> findet Dokumente, in denen alle von der Abfrage angegebenen Bitpositionen leer sind oder <code>0<\/code>:<\/p>\n<pre><code class=\"language-php\">{ &lt;field&gt; : { $bitsAllClear: &lt;numeric bitmask&gt; } }<\/code><\/pre>\n<pre><code class=\"language-php\">{ &lt;field&gt; : { $bitsAllClear: &lt; BinData bitmask&gt; } }<\/code><\/pre>\n<pre><code class=\"language-php\">{ &lt;field&gt; : { $bitsAllClear: [ &lt;position1&gt; , &lt;position2&gt; , ... ] } }<\/code><\/pre>\n<p>Wir verwenden hier das Beispiel f\u00fcr <code>$bitsAllSet<\/code>, um die Verwendung von <code>$bitsAllClear<\/code> zu demonstrieren. Die folgende Abfrage w\u00fcrde diesen Operator verwenden, um zu pr\u00fcfen, ob in Feld a die Bits an den Positionen 1 und 5 gel\u00f6scht sind:<\/p>\n<pre><code class=\"language-php\">db.collection.find( { a: { $bitsAllClear: [ 1, 5 ] } } )<\/code><\/pre>\n<p>Diese Abfrage w\u00fcrde mit den folgenden Dokumenten \u00fcbereinstimmen:<\/p>\n<pre><code class=\"language-php\">{ \"_id\" : 2, \"a\" : 20, \"binaryValueofA\" : \"00010100\" }\n{ \"_id\" : 3, \"a\" : 20, \"binaryValueofA\" : \"00010100\" }<\/code><\/pre>\n<h3>Meta-Operatoren<\/h3>\n<p>Es gibt verschiedene Abfragemodifikatoren, mit denen du das Verhalten oder die Ausgabe einer Abfrage in MongoDB \u00e4ndern kannst. Die Treiberschnittstellen stellen m\u00f6glicherweise Cursor-Methoden zur Verf\u00fcgung, die sie f\u00fcr deine Verwendung verpacken.<\/p>\n<h4>$hint<\/h4>\n<p>MongoDB hat <code>$hint<\/code> seit v3.2 veraltet. F\u00fcr MongoDB-Treiber wie Go, Java, Scala, Ruby, Swift usw. kann dieser Operator jedoch weiterhin verf\u00fcgbar sein. Er kann den Abfrageoptimierer dazu zwingen, einen bestimmten Index zu nutzen, um die Abfrage zu erf\u00fcllen, der dann entweder nach Dokument oder nach Indexname angegeben werden kann.<\/p>\n<p>Du kannst den <code>$hint<\/code> Operator auch verwenden, um Indexierungsstrategien und die Abfrageleistung zu testen. Nimm zum Beispiel die folgende Operation:<\/p>\n<pre><code class=\"language-php\">db.users.find().hint( { age: 1 } )<\/code><\/pre>\n<p>Diese Operation w\u00fcrde alle Dokumente in der Sammlung mit dem Namen <code>users<\/code> zur\u00fcckgeben, indem sie den Index f\u00fcr das Feld <code>age<\/code> nutzt.<\/p>\n<p>Du kannst auch einen Hinweis angeben, indem du eine der folgenden Formen verwendest:<\/p>\n<pre><code class=\"language-php\">db.users.find()._addSpecial( \"$hint\", { age : 1 } )\ndb.users.find( { $query: {}, $hint: { age : 1 } } )<\/code><\/pre>\n<p>Wenn ein Indexfilter f\u00fcr die Abfrageform existiert, w\u00fcrde MongoDB den <code>$hint<\/code> einfach ignorieren.<\/p>\n<h4>$comment<\/h4>\n<p>Mit dem Operator <code>$comment<\/code> kannst du einen Kommentar an eine Abfrage anh\u00e4ngen, egal in welchem Kontext <code>$query<\/code> erscheint. Da Kommentare in das Profilprotokoll \u00fcbertragen werden, kann das Hinzuf\u00fcgen eines Kommentars die Interpretation und Verfolgung deines Profils erleichtern.<\/p>\n<p>Du kannst <code>$comment<\/code> auf eine von drei Arten nutzen:<\/p>\n<pre><code class=\"language-php\">db.collection.find( { &lt;query&gt; } )._addSpecial( \"$comment\", &lt;comment&gt; )\ndb.collection.find( { &lt;query&gt; } ).comment( &lt;comment&gt; )\ndb.collection.find( { $query: { &lt;query&gt; }, $comment: &lt;comment&gt; } )<\/code><\/pre>\n<p>Wenn du Kommentare an Abfrageausdr\u00fccke in anderen Kontexten anh\u00e4ngen willst, wie z. B. mit <code>db.collection.update()<\/code>, verwende den Abfrageoperator <code>$comment<\/code> anstelle des Metaoperators.<\/p>\n<h4>$max<\/h4>\n<p>Du kannst einen <code>$max<\/code> Wert erw\u00e4hnen, um die exklusive Obergrenze f\u00fcr einen bestimmten Index anzugeben, um die Ergebnisse von <code>find()<\/code> einzuschr\u00e4nken. Dieser Operator gibt die Obergrenze f\u00fcr alle Schl\u00fcssel einer bestimmten Reihenfolge im Index an.<\/p>\n<p>Mongosh bietet dir die folgende <code>max()<\/code> Wrapper-Methode:<\/p>\n<pre><code class=\"language-php\">db.collection.find( { &lt;query&gt; } ).max( { field1: &lt;max value&gt; , ... fieldN: &lt;max valueN&gt; } )<\/code><\/pre>\n<p>Du kannst <code>$max<\/code> auch mit den folgenden beiden Formen angeben:<\/p>\n<pre><code class=\"language-php\">db.collection.find( { &lt;query&gt; } )._addSpecial( \"$max\", { field1: &lt;max value1&gt; ,\n ... fieldN: &lt;max valueN&gt; } )\ndb.collection.find( { $query: { &lt;query&gt; }, $max: { field1: &lt;max value1&gt; ,\n ... fieldN: &lt;max valueN&gt; } } )<\/code><\/pre>\n<p>Wenn du z.B. die exklusive Obergrenze angeben willst, beachte die folgenden Operationen auf einer Sammlung namens collection, die einen Index <code>{ age: 1 }<\/code> enth\u00e4lt:<\/p>\n<pre><code class=\"language-php\">db.collection.find( { &lt;query&gt; } ).max( { age: 100 } ).hint( { age: 1 } )<\/code><\/pre>\n<p>Diese Operation beschr\u00e4nkt die Abfrage auf die Dokumente, in denen das Feld Alter kleiner als 100 ist, und erzwingt einen Abfrageplan, der den Index <code>{ age: 1 }<\/code> von <code>minKey<\/code> bis 100 durchsucht.<\/p>\n<h4>$explain<\/h4>\n<p>Dieser Operator gibt dir Informationen \u00fcber den Abfrageplan. Er gibt ein Dokument zur\u00fcck, das die Indizes und Prozesse beschreibt, die f\u00fcr die R\u00fcckgabe der Abfrage verwendet werden. Das kann n\u00fctzlich sein, wenn du versuchst, eine Abfrage zu optimieren.<\/p>\n<p>Du kannst den <code>$explain<\/code> Operator in einer der folgenden Formen angeben:<\/p>\n<pre><code class=\"language-php\">db.collection.find()._addSpecial( \"$explain\", 1 )\ndb.collection.find( { $query: {}, $explain: 1 } )<\/code><\/pre>\n<h2>Best Practices f\u00fcr MongoDB-Operatoren<\/h2>\n<p>In diesem Abschnitt werfen wir einen Blick auf einige der besten Praktiken bei der Verwendung dieser MongoDB-Operatoren.<\/p>\n<h3>Einbetten und referenzieren<\/h3>\n<p>Die Einbettung ist eine nat\u00fcrliche Erweiterung der Datenmodellierung. Sie erm\u00f6glicht es dir, Anwendungs-Joins zu vermeiden, was Aktualisierungen und Abfragen reduzieren kann.<\/p>\n<p>Du kannst Daten mit einer 1:1-Beziehung in ein einzelnes Dokument einbetten. Aber auch Daten mit einer Many:1-Beziehung, bei der &#8222;viele&#8220; Objekte in ihren \u00fcbergeordneten Dokumenten erscheinen, k\u00f6nnen valide Kandidaten sein.<\/p>\n<p>Diese Art von Daten im selben Dokument zu speichern, klingt nach einer umsichtigen Entscheidung. Die Einbettung bietet jedoch eine bessere Leistung f\u00fcr Lesevorg\u00e4nge mit dieser Art von Datenlokalit\u00e4t.<\/p>\n<p>Eingebettete Datenmodelle k\u00f6nnen Entwicklern auch helfen, verkn\u00fcpfte Daten in einem einzigen Schreibvorgang zu aktualisieren. Das funktioniert, weil Schreibvorg\u00e4nge f\u00fcr einzelne Dokumente transaktional sind.<\/p>\n<p>Du solltest die Referenzierung f\u00fcr die folgenden Szenarien in Betracht ziehen:<\/p>\n<ul>\n<li>Wenn du ein Dokumentsegment aktualisierst und es immer l\u00e4nger wird, w\u00e4hrend der Rest des Dokuments statisch ist.<\/li>\n<li>Wenn auf ein Dokument zugegriffen wird, das aber Daten enth\u00e4lt, die selten verwendet werden. Das Einbetten w\u00fcrde nur den Speicherbedarf erh\u00f6hen, daher ist die Referenzierung sinnvoller.<\/li>\n<li>Wenn die Gr\u00f6\u00dfe des Dokuments die 16 MB-Grenze von MongoDB \u00fcberschreitet. Das kann passieren, wenn du viele 1:1-Beziehungen modellierst (z. B. <em>Mitarbeiter:Abteilung<\/em>).<\/li>\n<\/ul>\n<h3>Untersuche Profiling und Abfragemuster<\/h3>\n<p>F\u00fcr die meisten Entwickler\/innen besteht der erste Schritt zur <a href=\"https:\/\/kinsta.com\/de\/blog\/tools-fuer-performance-tests\/\">Leistungsoptimierung<\/a> darin, die tats\u00e4chlichen und erwarteten Abfragemuster zu verstehen. Sobald du die Abfragemuster deiner Anwendung gut genug kennst, kannst du dein Datenmodell erstellen und geeignete Indizes ausw\u00e4hlen.<\/p>\n<p>MongoDB-Entwickler haben Zugang zu verschiedenen leistungsstarken Tools, mit denen sie die Leistung verbessern k\u00f6nnen. Das bedeutet aber nicht, dass Abfrageprofile und -muster ignoriert werden k\u00f6nnen.<\/p>\n<p>Eine einfache M\u00f6glichkeit, die Leistung zu steigern, ist zum Beispiel, deine Abfragemuster zu analysieren und zu verstehen, wo du Daten einbetten kannst. Weitere M\u00f6glichkeiten, die Leistung von MongoDB zu verbessern, nachdem du deine wichtigsten Abfragemuster identifiziert hast, sind:<\/p>\n<ul>\n<li>Sicherstellen, dass du Indizes f\u00fcr alle Felder hast, die du abfragst.<\/li>\n<li>Die Ergebnisse h\u00e4ufiger Unterabfragen auf Dokumenten speichern, um die Leselast zu verringern.<\/li>\n<li>Einen Blick in deine Logs werfen, um langsame Abfragen zu finden und dann deine Indizes \u00fcberpr\u00fcfen.<\/li>\n<\/ul>\n<h3>Datenindizierung und -modellierung \u00fcberpr\u00fcfen<\/h3>\n<p>W\u00e4hrend du dein Datenmodell erstellst, musst du entscheiden, wie du die Beziehungen zwischen den Daten modellieren willst. Ein Beispiel f\u00fcr eine anwendungsspezifische \u00dcberlegung ist die Entscheidung, ob ein Dokument eingebettet werden soll oder ob stattdessen ein Verweis auf verschiedene Dokumente in unterschiedlichen Sammlungen erstellt werden soll.<\/p>\n<p>Ein gro\u00dfer Vorteil von JSON-Dokumenten ist, dass sie es Entwicklern erm\u00f6glichen, Daten entsprechend den Anforderungen der Anwendung zu modellieren. Durch die Verschachtelung von Unterdokumenten und Arrays kannst du komplexe Beziehungen zwischen Daten modellieren, indem du einfache Textdokumente nutzt.<\/p>\n<p>Du kannst MongoDB auch f\u00fcr die Modellierung folgender Dinge verwenden:<\/p>\n<ul>\n<li>Geodaten<\/li>\n<li>Tabellarische, flache und spaltenf\u00f6rmige Strukturen<\/li>\n<li>Einfache Schl\u00fcssel-Werte-Paare<\/li>\n<li>Zeitreihendaten<\/li>\n<li>Kanten und Knoten von zusammenh\u00e4ngenden Graphenstrukturen und \u00c4hnlichem<\/li>\n<\/ul>\n<h3>Sharding und Replikation \u00fcberwachen<\/h3>\n<p>Die Replikation kann entscheidend zur Leistungssteigerung beitragen, da sie die Datenverf\u00fcgbarkeit durch horizontale Skalierung erh\u00f6ht. Replikation kann zu einer besseren Leistung und mehr Sicherheit durch Redundanz f\u00fchren.<\/p>\n<p>Die Leistungs\u00fcberwachung kann m\u00fchsam sein und zus\u00e4tzliche Ressourcen und Zeit erfordern, um einen reibungslosen Betrieb zu gew\u00e4hrleisten. Du kannst die auf dem Markt erh\u00e4ltlichen Tools zur Leistungs\u00fcberwachung nutzen, die auf deine speziellen Bed\u00fcrfnisse zugeschnitten sind.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/de\/apm-tool\/\">Kinsta APM<\/a> kann zum Beispiel mit Zeitstempeln versehene Informationen \u00fcber die MySQL-Datenbankabfragen, PHP-Prozesse, externe HTTP-Aufrufe und vieles mehr erfassen. Du kannst dieses kostenlose Tool auch zur Fehlersuche nutzen:<\/p>\n<ul>\n<li>Lange API-Aufrufe<\/li>\n<li>Lange externe URL-Anfragen<\/li>\n<li>Langsame Datenbankabfragen, um nur einige zu nennen.<\/li>\n<\/ul>\n<p>In MongoDB kann die Replikation durch Replikats\u00e4tze erreicht werden, mit denen Entwickler Daten von einem prim\u00e4ren Knoten oder Server auf mehrere sekund\u00e4re Server kopieren k\u00f6nnen. So kann die Replikation einige Abfragen auf den Secondaries und nicht auf dem Primary Server ausf\u00fchren, was Konflikte vermeidet und zu einer besseren Lastverteilung f\u00fchrt.<\/p>\n<p>Sharded-Cluster in MongoDB sind eine weitere M\u00f6glichkeit, die Leistung zu verbessern. \u00c4hnlich wie die Replikation kann das Sharding genutzt werden, um gro\u00dfe Datens\u00e4tze auf mehrere Server zu verteilen.<\/p>\n<p>Mithilfe eines Shard-Schl\u00fcssels k\u00f6nnen Entwickler\/innen Shards oder Teile von Daten auf mehrere Server kopieren. Diese Server k\u00f6nnen zusammenarbeiten, um alle Daten zu nutzen.<\/p>\n<p>Sharding hat eine Reihe von Vorteilen, darunter die horizontale Skalierung f\u00fcr Schreib- und Lesevorg\u00e4nge, eine h\u00f6here Verf\u00fcgbarkeit und eine gr\u00f6\u00dfere Speicherkapazit\u00e4t.<\/p>\n<h3>Speichernutzung bestimmen<\/h3>\n<p>MongoDB ist am leistungsf\u00e4higsten, wenn das Working Set einer Anwendung (d. h. h\u00e4ufig aufgerufene Daten und Indizes) ohne Probleme in den Arbeitsspeicher passt. Auch wenn andere Faktoren f\u00fcr die Leistung ausschlaggebend sind, ist die Gr\u00f6\u00dfe des Arbeitsspeichers f\u00fcr die Dimensionierung der Instanz am wichtigsten.<\/p>\n<p>Wenn das Arbeitsset einer Anwendung in den Arbeitsspeicher passt, muss die Leseaktivit\u00e4t auf der Festplatte gering sein. Wenn dein Arbeitsset jedoch den Arbeitsspeicher des Instance-Servers oder die Gr\u00f6\u00dfe \u00fcberschreitet, steigt die Leseaktivit\u00e4t rapide an.<\/p>\n<p>Wenn du das bemerkst, kannst du das Problem vielleicht l\u00f6sen, indem du auf eine gr\u00f6\u00dfere Instanz mit mehr Arbeitsspeicher umsteigst.<\/p>\n<h3>Platziere mehrwertige Felder am Ende<\/h3>\n<p>Wenn du eine Reihe von Feldern indizierst und eines der Felder, die du abfragen willst, einen dieser &#8222;mehrwertigen&#8220; Operatoren verwendet, solltest du ihn an das Ende des Indexes stellen. Du musst den Index so anordnen, dass die abgefragten Felder f\u00fcr exakte Werte an erster Stelle stehen und die &#8222;mehrwertigen&#8220; Operatoren zuletzt im Index auftauchen.<\/p>\n<p>Eine Ausnahme hiervon w\u00e4re die Sortierung nach den Feldern. Platziere diese zwischen den &#8222;mehrwertigen&#8220; und den exakten Feldern, um den Aufwand f\u00fcr das Sortieren im Speicher zu verringern.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Bei MongoDB ist Geschwindigkeit das A und O. Um Abfragen schnell zu beantworten, nutzt MongoDB Operatoren, um mathematische oder logische Aufgaben auszuf\u00fchren. Kurz gesagt: MongoDB-Operatoren zu verstehen, ist der Schl\u00fcssel zur Beherrschung von MongoDB.<\/p>\n\n<p>In diesem Artikel werden einige der wichtigsten MongoDB-Operatoren vorgestellt, die du f\u00fcr deine Daten verwenden kannst, z. B. Vergleichsoperatoren, logische Operatoren, Meta-Operatoren und Projektionsoperatoren, um nur einige zu nennen. Au\u00dferdem erf\u00e4hrst du, wie du die MongoDB-Operatoren nutzen kannst und welche Best Practices es gibt, damit du das Beste aus ihnen herausholen kannst.<\/p>\n<p>Welche(n) der Operatoren verwendest du am h\u00e4ufigsten und warum? Teile uns deine Meinung in den Kommentaren mit &#8211; wir w\u00fcrden uns freuen, sie zu h\u00f6ren!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In jedem Unternehmen sind Daten dein gr\u00f6\u00dftes Kapital. Durch die Analyse von Daten kannst du Entscheidungen \u00fcber Kundentrends und Verhaltensvorhersagen treffen. Das steigert die Rentabilit\u00e4t deines &#8230;<\/p>\n","protected":false},"author":117,"featured_media":54243,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[826,242,570,420,721],"topic":[991],"class_list":["post-54209","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-datab","tag-database","tag-databases","tag-development","tag-mongodb","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>9 Arten von Mongodb-Operatoren, die du kennen musst<\/title>\n<meta name=\"description\" content=\"Dieser Artikel hebt einige der wichtigsten MongoDB-Operatoren hervor, die dir helfen k\u00f6nnen, die Leistung zu verbessern, und zeigt dir, wie du sie einsetzen kannst.\" \/>\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\/mongodb-operatoren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"9 Arten von Mongodb-Operatoren, die du kennen musst\" \/>\n<meta property=\"og:description\" content=\"Dieser Artikel hebt einige der wichtigsten MongoDB-Operatoren hervor, die dir helfen k\u00f6nnen, die Leistung zu verbessern, und zeigt dir, wie du sie einsetzen kannst.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/\" \/>\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-09-19T08:34:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-18T08:23:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.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=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Dieser Artikel hebt einige der wichtigsten MongoDB-Operatoren hervor, die dir helfen k\u00f6nnen, die Leistung zu verbessern, und zeigt dir, wie du sie einsetzen kannst.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"34\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"9 Arten von Mongodb-Operatoren, die du kennen musst\",\"datePublished\":\"2022-09-19T08:34:14+00:00\",\"dateModified\":\"2023-08-18T08:23:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/\"},\"wordCount\":5506,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg\",\"keywords\":[\"datab\",\"database\",\"databases\",\"development\",\"MongoDB\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/\",\"name\":\"9 Arten von Mongodb-Operatoren, die du kennen musst\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg\",\"datePublished\":\"2022-09-19T08:34:14+00:00\",\"dateModified\":\"2023-08-18T08:23:41+00:00\",\"description\":\"Dieser Artikel hebt einige der wichtigsten MongoDB-Operatoren hervor, die dir helfen k\u00f6nnen, die Leistung zu verbessern, und zeigt dir, wie du sie einsetzen kannst.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"9 Arten von Mongodb-Operatoren, die du kennen musst\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#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\":\"9 Arten von Mongodb-Operatoren, die du kennen musst\"}]},{\"@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\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"9 Arten von Mongodb-Operatoren, die du kennen musst","description":"Dieser Artikel hebt einige der wichtigsten MongoDB-Operatoren hervor, die dir helfen k\u00f6nnen, die Leistung zu verbessern, und zeigt dir, wie du sie einsetzen kannst.","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\/mongodb-operatoren\/","og_locale":"de_DE","og_type":"article","og_title":"9 Arten von Mongodb-Operatoren, die du kennen musst","og_description":"Dieser Artikel hebt einige der wichtigsten MongoDB-Operatoren hervor, die dir helfen k\u00f6nnen, die Leistung zu verbessern, und zeigt dir, wie du sie einsetzen kannst.","og_url":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2022-09-19T08:34:14+00:00","article_modified_time":"2023-08-18T08:23:41+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg","type":"image\/jpeg"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Dieser Artikel hebt einige der wichtigsten MongoDB-Operatoren hervor, die dir helfen k\u00f6nnen, die Leistung zu verbessern, und zeigt dir, wie du sie einsetzen kannst.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Salman Ravoof","Gesch\u00e4tzte Lesezeit":"34\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"9 Arten von Mongodb-Operatoren, die du kennen musst","datePublished":"2022-09-19T08:34:14+00:00","dateModified":"2023-08-18T08:23:41+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/"},"wordCount":5506,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg","keywords":["datab","database","databases","development","MongoDB"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/","url":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/","name":"9 Arten von Mongodb-Operatoren, die du kennen musst","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg","datePublished":"2022-09-19T08:34:14+00:00","dateModified":"2023-08-18T08:23:41+00:00","description":"Dieser Artikel hebt einige der wichtigsten MongoDB-Operatoren hervor, die dir helfen k\u00f6nnen, die Leistung zu verbessern, und zeigt dir, wie du sie einsetzen kannst.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/09\/mongodb-operatoren.jpeg","width":1460,"height":730,"caption":"9 Arten von Mongodb-Operatoren, die du kennen musst"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-operatoren\/#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":"9 Arten von Mongodb-Operatoren, die du kennen musst"}]},{"@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\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/54209","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\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=54209"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/54209\/revisions"}],"predecessor-version":[{"id":61890,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/54209\/revisions\/61890"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/translations\/dk"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/54209\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/54243"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=54209"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=54209"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=54209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}