Freunde, ein weiterer Kursstart
Das Webinar wurde abgehalten
MongoDB-Funktionen
MongoDB ist ein dokumentenorientiertes Open-Source-DBMS, das keine Beschreibung des Tabellenschemas erfordert. Es ist als NoSQL klassifiziert und verwendet BSON (binäres JSON). Sofort skalierbar, in C++ geschrieben und unterstützt JavaScript-Syntax. Es gibt keine SQL-Unterstützung.
MongoDB verfügt über Treiber für viele gängige Programmiersprachen (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby usw.). Es gibt auch inoffizielle und von der Community unterstützte Treiber für andere Programmiersprachen.
Schauen wir uns nun die grundlegenden Befehle an, die nützlich sein können.
Also, um MongoDB in Docker bereitzustellen, wir schreiben:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
So geschieht es Client-Start MongoDB:
Schreiben wir nun das traditionelle Hallo Welt:
print (“Hello world!”)
Danach - Lasst uns den Zyklus beginnen:
Wie Sie bemerkt haben, vor uns reguläres JS, und MongoDB ist ein vollwertiger JavaScript-Interpreter.
Wann sollte MongoDB verwendet werden?
Es gibt eine Geschichte, dass das durchschnittliche Startup im Silicon Valley die Person ist, die vor einer Woche das Buch „HTML für Dummies“ aufgeschlagen hat. Welchen Stapel wird er wählen? Stimmen Sie zu, dass es für ihn sehr praktisch ist, wenn er aus offensichtlichen Gründen JavaScript in seinem Browser hat, Node.js auf dem Server läuft und JavaScript auch in der Datenbank läuft. Das ist Punkt Nummer 1.
Zweitens gibt es
Drittens möchte ich betonen, dass sich MongoDB durch gute Eigenschaften auszeichnet Skalierbarkeit - und das ist eines der Hauptmerkmale der Datenbank. Wenn Sie nicht im Voraus wissen, wie hoch die Auslastung sein wird, ist MongoDB perfekt. Darüber hinaus werden vorkonfigurierte Muster unterstützt, z Scherben и Reproduzieren, und das alles geschieht ziemlich transparent, das heißt, es ist sehr bequem zu arbeiten.
Hinsichtlich Terminologie in MongoDB dann:
- Datenbanken sind Datenbanken (Schemata, Tabellensammlungen);
- In MongoDB gibt es so etwas wie коллекция - Dies ist ein Analogon einer Tabelle und einer Reihe von Dokumenten, die logischerweise verbunden werden sollten;
- Dokumente sind analog zu einer Zeichenfolge.
Datenbankerstellung und einfache Abfragen
Um eine Datenbank zu erstellen, müssen Sie sie nur verwenden:
use learn
Lassen Sie uns nun eine kleine Einfügung des Dokuments erstellen. Sei es zum Beispiel ein Einhorn namens Aurora:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - ein globales Objekt für den Zugriff auf die Datenbank, also eigentlich die „Monga“ selbst. Wird zum Sharding verwendet sh, zur Replikation - rs.
Welche Befehle hat das Objekt? db:
Kehren wir also zu unserem Befehl zurück, woraufhin die Konsole meldet, dass eine Zeile eingefügt wurde:
Слово unicorns
in einer Mannschaft db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
bezeichnet eine Sammlung. Bitte beachten Sie hier, dass wir die Sammlung nicht beschrieben oder erstellt haben, sondern einfach „Einhörner“ geschrieben, eine Einfügung gemacht haben und schon hatten wir eine Sammlung.
Und so können wir es tun Holen Sie sich alle unsere Kollektionen:
db.getCollectionNames()
Und so weiter. Kann noch eins einfügen Sammlung:
Jetzt fragen wir komplette Sammlung (Wir erinnern Sie daran, dass in unserem Fall die Datenbank bereits Informationen über zwei Einhörner mit demselben Namen enthält):
db.unicorns.find()
Bitte beachten Sie, hier ist unser JSON (es gibt einen Namen, ein Geschlecht, ein Gewicht und eine eindeutige Objektkennung):
Jetzt fügen wir noch ein paar Einhörner mit den gleichen Namen ein:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
Und mal sehen, was passiert ist:
Wie Sie sehen, haben wir zusätzliche Felder: home и Wurm, was Aurora nicht hat.
Fügen wir noch ein paar Einhörner hinzu:
db.unicorns.insertMany([{name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63},
{name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43},
{name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182},
{name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}])
Also haben wir mit JavaScript vier weitere Objekte eingefügt:
In welchen Datenbanken ist es Ihrer Meinung nach bequemer, Passdaten zu speichern: relationalen Datenbanken oder Mongo?
Die Antwort liegt auf der Hand – in Monga, und das obige Beispiel zeigt dies gut. Es ist kein Geheimnis, dass KLADR in der Russischen Föderation ein Ärgernis ist. Und Monga passt sehr gut zu Adressen, da man alles als Array festlegen kann und das Leben viel einfacher wird. Und es ist gut Benutzerfall für MongoDB.
Fügen wir weitere Einhörner hinzu:
db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80});
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40});
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39});
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2});
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33});
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54});
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'});
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});
Achten Sie nun auf die Unterlagen. Als dob Wir lagern komplette Objekte. Es gibt auch Informationen darüber, was ein Einhorn mag, und nicht jeder hat diese Informationen. Es liegen also innere Lügen vor vollständiges Array.
Um die Ergebnisse schöner anzuzeigen, können Sie die Methode übrigens am Ende des Suchbefehls aufrufen .pretty()
:
Wenn Sie es brauchen Informationen zum letzten Fehler, verwenden Sie den folgenden Befehl:
db.getLastError()
Dies kann nach jedem Einfügen erfolgen, oder Sie können Write Concern konfigurieren. Es ist besser, darüber nachzulesen
Kommen wir zu komplexeren Abfragen
Abfrage nach exaktem Feldwert:
db.unicorns.find({gender: 'm'})
Wenn wir eine solche Anfrage schreiben, erhalten wir in der Konsolenausgabe eine Liste aller männlichen Einhörner.
Sie können es auch tun Abfrage mehrerer Felder gleichzeitig: nach Geschlecht und Gewicht:
Achten Sie oben auf das Besondere $gt-Selektor, mit dem Sie alle männlichen Einhörner mit einem Gewicht von mehr als 700 züchten können.
Du kannst nachschauen existiert das Feld überhaupt?:
db.unicorns.find({vampires: {$exists: false}})
Oder so:
db.unicorns.find({'parents.father': {$exists: true}})
Das nächste Team wird die Einhörner hervorbringen, deren Namen mit den Buchstaben A oder a beginnen:
db.unicorns.find({name: {$regex: "^[Aa]"}})
Jetzt überlegen Array-Suche. Frage Nr. 1: Was wird dieser Befehl ausgeben:
db.unicorns.find({loves:'apple'})
Das ist richtig: jeder, der Äpfel liebt.
Der folgende Befehl gibt nur die Einhorndaten zurück, die enthalten nur Äpfel und Wassermelonen:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
Und noch ein Befehl:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
In unserem Fall wird nichts zurückgegeben, da bei der Übergabe eines Arrays das erste Element mit dem ersten, das zweite mit dem zweiten usw. verglichen wird. Das heißt, das Array muss auch übereinstimmen nach Position diese Werte.
Und so sieht es aus Durchsuchen eines Arrays mit dem „OR“-Operator:
Das folgende Beispiel zeigt es uns Suche mit dem Operator $all. Und hier ist die Reihenfolge unwichtig:
Das können wir auch Suche nach Array-Größe:
Was aber, wenn wir ein Array finden möchten, dessen Größe größer als eins ist? Dafür gibt es einen Operator $wo, mit dem Sie komplexere Dinge schreiben können:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
Übrigens, wenn Sie üben möchten,
Cursorfunktionen
Lassen Sie uns ein wenig abschweifen und ein paar Worte zu den Funktionen von Monga sagen:
- find() und andere Operationen geben keine Daten zurück – sie geben einen sogenannten „Cursor“ zurück;
- Die Tatsache, dass wir sehen, wie die Daten gedruckt werden, ist die Arbeit des Dolmetschers.
Tippen db.unicorns.find Ohne Klammern erhalten wir die Eingabeaufforderung:
Wir erfüllen weiterhin Anfragen
Es gibt auch den $in-Operator:
db.unicorns.find({weight: {$in: [650, 704]}})
Lassen Sie uns nun über das Update sprechen. Ändern wir zum Beispiel das Gewicht des Rooooodles-Einhorns:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
Als Ergebnis unseres Handelns wurde das Dokument wird komplett aktualisiert, und nur ein angegebenes Feld bleibt darin:
Das heißt, das Einzige, was für unser Objekt übrig bleibt, ist das Gewicht 2222 und natürlich die ID.
Sie können die Situation mit korrigieren $ set:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
Es ist auch möglich Werte erhöhen:
Und da ist Upsert - Kombination aus Update und Insert:
So wird es gemacht Feldauswahl:
Es bleiben noch ein paar Worte darüber hinzuzufügen überspringen и begrenzen:
Kolleginnen und Kollegen, das ist alles, wenn Sie die Details wissen wollen,
Source: habr.com