MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Verknüpfen und Erstellen von MongoDB-Joins mit SQL:Teil 1

SQL ist die am meisten bevorzugte Art, relationale Datenbanken in Bezug auf Abfragen zu verwenden. Es versteht sich, dass Benutzer mit relationalen Datenbanken wie MySQL und PostgreSQL gearbeitet haben, die die SQL-Abfragefunktion verwenden. Im Allgemeinen ist SQL leicht verständlich und wurde daher vor allem in relationalen Datenbanken weit verbreitet.

SQL ist jedoch ziemlich komplex, wenn versucht wird, eine große Anzahl von Dokumenten in eine Datenbank einzubinden. Kurz gesagt, es ist nicht für Dokumentendatenbanken gedacht, da es mit einer Reihe von Rückschlägen einhergeht. Beispielsweise können Sie eingebettete Array-Dokumente nicht einfach abfragen, oder Sie müssen ein Unterprogramm entwerfen, um zurückgegebene Daten zu iterieren und zu filtern, um die erforderlichen Ergebnisse zu erhalten. Folglich führt dies zu einer Erhöhung der Ausführungsdauer. Ein gutes SQL-Verständnis bietet jedoch ab einem bestimmten Punkt eine bessere Grundlage für die Interaktion mit MongoDB, anstatt bei Null anzufangen.

In diesem Blog verwenden wir das Studio 3T-Programm, um die verschiedenen SQL-Join-Abfragen zu zeigen und wie Sie sie in MongoDB-Abfragen umgestalten können, um eine bessere Leistung zu erzielen. Das Programm kann unter diesem Link heruntergeladen werden.

SQL mit MongoDB verbinden

Es gibt mehrere Treiber bzw. Schnittstellen, über die Sie SQL verwenden können, um mit MongoDB zu kommunizieren, beispielsweise ODBC. ODBC steht für Open Database Connectivity. Dies ist einfach eine Schnittstelle, die es Anwendungen ermöglicht, auf Daten in Datenbankverwaltungssystemen zuzugreifen, wobei SQL als Standardprozess für den Zugriff auf diese Daten verwendet wird. Es kommt mit einem zusätzlichen Interoperabilitätsvorteil, wodurch eine einzelne Anwendung auf mehrere Datenbankverwaltungssysteme zugreifen kann.

In diesem Blog werden wir Code aus SQL erstellen und testen und ihn dann über einen Aggregationseditor optimieren, um eine MongoDB-Abfrage zu erstellen.

Zuordnungsdiagramm für SQL zu MongoDB

Bevor wir ins Detail gehen, müssen wir die grundlegenden Beziehungen zwischen diesen beiden Datenbanken verstehen, insbesondere Schlüsselwörter im Abfragekonzept.

Terminologie und Konzepte

SQL MongoDB
Tabellen
Zeile
Spalte
Tabellenverknüpfungen
Sammlung
BSON-Dokument
Feld
$lookup

Der Primärschlüssel in SQL definiert eine eindeutige Spalte, die die Zeilen grundsätzlich in der Reihenfolge der Aufzeichnungszeit anordnet. Andererseits ist der Primärschlüssel in MongoDB ein eindeutiges Feld, um ein Dokument zu speichern und sicherzustellen, dass indizierte Felder keine doppelten Werte speichern.

Multiplenines Become a MongoDB DBA – Bringing MongoDB to ProductionErfahren Sie, was Sie wissen müssen, um MongoDBDownload for Free bereitzustellen, zu überwachen, zu verwalten und zu skalieren

Korrelation zwischen SQL und MongoDB

Nehmen wir an, wir haben Schülerdaten und möchten diese Daten sowohl in der SQL-Datenbank als auch in MongoDB aufzeichnen. Wir können ein einfaches Studentenobjekt wie folgt definieren:

{
    name: ‘James Washington’,
    age: 15,
    grade: A,
    Score: 10.5
}

Beim Erstellen einer SQL-Tabelle müssen wir die Spaltennamen und den Datentyp definieren, während in MongoDB beim ersten Einfügen automatisch eine Sammlung erstellt wird.

Die folgende Tabelle hilft uns zu verstehen, wie einige der SQL-Anweisungen in MongoDB geschrieben werden können.

SQL-Schema-Anweisung MongoDB-Schemaanweisungen
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

So fügen Sie ein Dokument in die Datenbank ein

INSERT INTO students(Name, age, grade,score) VALUES(“James Washington”, 15, “A”, 10.5)

Wir können ein Schemadesign mit einigen Modulen wie Mongoose definieren und die Felder wie ein Objekt definieren, anstatt direkt ein Dokument einzufügen, um die Korrelation zu zeigen. Die primäre Ablage-ID wird beim Einfügen eines Dokuments automatisch generiert.

{
  name: String,
  age Number,
  score: Number
}

Einfügen eines neuen Dokuments zum Erstellen der Sammlung

db.students.insertOne({
    name: ‘James Washington’,
    age: 15,
    grade: ‘A’,
    score: 10.5
})

Verwenden der ADD-Anweisung zum Hinzufügen einer neuen Spalte zur vorhandenen Tabelle.

ALTER TABLE students ADD units 10

Die Struktur von Sammlungsdokumenten ist nicht gut definiert und daher aktualisieren Sie Dokumente auf Dokumentebene mit updateMany()

db.students.updateMany({}, {$set: {units: 10}})

Um eine Spalte (Einheiten) zu löschen

ALTER TABLE students DROP COLUMN units

Um ein Feld (Einheiten) zu löschen

db.students.updateMany({}, {$unset: {units: “”}})

Um einen Tisch Studenten fallen zu lassen

DROP TABLE students

Um Sammlungsstudenten fallen zu lassen

db.students.drop()
SQL-Select-Anweisung MongoDB-Suchanweisungen

Alle Zeilen auswählen

SELECT * FROM students

Alle Dokumente auswählen

db.students.find()

Um nur bestimmte Spalten zurückzugeben.

SELECT name, grade FROM students

Um nur bestimmte Felder zurückzugeben. Standardmäßig wird das Feld _id zurückgegeben, sofern im Projektionsprozess nicht anders angegeben.

db.students.find({}, {name: 1, grade: 1, _id: 0})

Das Festlegen der _id:0 bedeutet, dass nur das zurückgegebene Dokument den Namen und nur die Werte des Bewertungsobjekts enthält.

Um bestimmte Zeilen mit einem übereinstimmenden Spaltenwert auszuwählen.

SELECT * FROM students WHERE grade = “A”

So wählen Sie bestimmte Dokumente mit übereinstimmenden Feldwerten aus.

db.students.find({grade: “A”})

Auswählen von Zeilen mit einer Spalte, deren Werte einige Zeichen als bereitgestellten Kriterienwert enthalten

SELECT * FROM students WHERE name like  “James%”

Auswählen von Dokumenten mit einem Feld, dessen Werte einige Zeichen als bereitgestellter Kriterienwert enthalten

db.students.find({grade: {$regex: /^James/}})

Um die Zeilen in aufsteigender Reihenfolge mit dem Primärschlüssel zurückzugeben.

SELECT * FROM students ORDER BY id ASC

Um die Dokumente in aufsteigender Reihenfolge mit dem Primärschlüssel zurückzugeben

db.students.find().sort({$natural: 1})

Zurückgegebene Zeilen in Übereinstimmung mit einer Spalte (Klasse) gruppieren

SELECT DISTINCT (grade) FROM students

Zur Gruppierung zurückgesendeter Dokumente in Übereinstimmung mit einem bestimmten Bereich (Klasse)

db.students.aggregate([
{$group: : {_id: “$grade”}}
]

Begrenzung der Anzahl der zurückgegebenen Zeilen und Überspringen einiger

SELECT * FROM students LIMIT 1 SKIP 4

Begrenzung der Anzahl der zurückgegebenen Dokumente und Überspringen von Zeilen

db.students.find.limit(1).skip(4)

Eine wesentliche Option ist zu wissen, wie unsere Abfrage ausgeführt wird, also verwenden Sie die EXPLAIN-Methode.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
SQL-Update-Anweisung MongoDB-Update-Anweisungen

Aktualisieren Sie die Notenspalte für Schüler, die mindestens 15 Jahre alt sind

UPDATE students SET grade  = “B” WHERE age >= 15

Hier verwenden wir einige Operatoren wie $gt, $lt und $lte.

db.students.updateMany({age: {$gte: 15}}, {$set: {status: “B”}})

Einen Spaltenwert erhöhen

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
SQL-Löschanweisung MongoDB-Entfernungsanweisungen

Um alle Zeilen zu löschen

DELETE FROM students

Um alle Dokumente zu löschen.

db.students.remove({})

Um eine bestimmte Zeile zu löschen, in der eine Spalte einen bestimmten Wert hat.

DELETE FROM students WHERE age = 15
db.students.remove({age: 15})

Diese Beispielzuordnungstabelle ermöglicht es Ihnen, besser zu verstehen, was wir in unserem nächsten Thema lernen werden.

SQL und Studio 3T

Studio 3T ist eines der verfügbaren Programme, das bei der Verbindung von SQL und MongoDB hilft. Es hat eine SQL-Abfragefunktion, um eine zu erweitern, um SQL zu manipulieren. Die Abfrage wird in die Mongo-Shell interpretiert, um einen einfachen Abfragecode im Äquivalent der MongoDB-Sprache zu erzeugen. Neben einfachen Abfragen kann die Studio 3T-Anwendung jetzt Joins durchführen.

Für unsere obigen Beispieldaten können wir nach dem Verbinden Ihrer Datenbank in Studio 3T das SQL-Fenster verwenden, um das Dokument zu finden, das unseren Kriterien entspricht, z. B.:

SELECT * FROM students  WHERE name LIKE  'James%';

Wenn Sie ein Dokument haben, dessen Namensfeld auf den Wert James gesetzt ist, wird es zurückgegeben. Wenn Sie auf die Registerkarte Abfragecode klicken, wird Ihnen ebenso ein Fenster mit dem entsprechenden MongoDB-Code angezeigt. Für die obige Aussage haben wir:

db.getCollection("students").find(
    { 
        "name" : /^James.*$/i
    }
);

Zusammenfassung

Manchmal möchten Sie vielleicht aufgrund Ihrer SQL-Kenntnisse schnell mit MongoDB interagieren. Wir haben einige grundlegende Codeähnlichkeiten zwischen SQL und seinem Äquivalent in MongoDB gelernt. Darüber hinaus verfügen einige Programme wie Studio 3T über gut etablierte Tools zum Konvertieren der SQL-Abfrage in eine MongoDB-äquivalente Sprache und zur Feinabstimmung dieser Abfrage für bessere Ergebnisse. Nun, für die meisten von uns wird dies ein großartiges Werkzeug sein, um unsere Arbeit zu erleichtern und sicherzustellen, dass der Code, den wir am Ende haben, sehr optimal für die Leistung unserer Datenbank ist. In Teil 2 dieses Blogs werden wir etwas über SQL INNER JOIN in MongoDB lernen.