sql >> Database >  >> NoSQL >> MongoDB

Koppelen en maken van MongoDB-joins met SQL:deel 1

SQL is de meest geprefereerde manier om relationele databases te gebruiken voor zover het query's betreft. Het is duidelijk dat gebruikers zouden hebben gewerkt met relationele databases zoals MySQL en PostgreSQL die gebruikmaken van de SQL-queryfunctie. Over het algemeen is SQL gemakkelijk te begrijpen en werd daarom veel gebruikt, vooral in relationele databases.

SQL is echter vrij complex wanneer u probeert een brede reeks documenten in een database te betrekken. In een notendop, het is niet bedoeld voor documentdatabases, omdat het gepaard gaat met een aantal tegenslagen. U kunt bijvoorbeeld niet gemakkelijk ingesloten array-documenten opvragen, of u moet een subprogramma ontwerpen om de geretourneerde gegevens te herhalen en te filteren om de vereiste resultaten te krijgen. Dit resulteert dus in een verhoging van de uitvoeringsduur. Maar een goed begrip van SQL zal een betere basis bieden voor interactie met MongoDB vanaf een bepaald punt in plaats van helemaal opnieuw te beginnen.

In deze blog zullen we het Studio 3T-programma gebruiken om de verschillende SQL-joinquery's te laten zien en hoe u deze opnieuw kunt ontwerpen in MongoDB-query's om betere prestaties te bereiken. Het programma kan worden gedownload via deze link.

SQL verbinden met MongoDB

Er zijn verschillende stuurprogramma's of liever interfaces waarmee u SQL kunt gebruiken om met MongoDB te communiceren, bijvoorbeeld ODBC. ODBC staat voor Open Database Connectiviteit. Dit is gewoon een interface waarmee toepassingen toegang kunnen krijgen tot gegevens in databasebeheersystemen met SQL als het standaardproces voor toegang tot die gegevens. Het wordt geleverd met een extra interoperabiliteitsvoordeel waarbij een enkele applicatie toegang heeft tot meerdere databasebeheersystemen.

In deze blog zullen we code van SQL produceren en testen en deze vervolgens optimaliseren via een aggregatie-editor om een ​​MongoDB-query te produceren.

Kaartschema voor SQL naar MongoDB

Voordat we ingaan op veel details, moeten we de basisrelaties tussen deze 2 databases begrijpen, met name trefwoorden in het zoekconcept.

Terminologie en concepten

SQL MongoDB
Tabel
Rij
Kolom
Tabel samenvoegingen
Verzameling
BSON-document
Veld
$lookup

De primaire sleutel in SQL definieert een unieke kolom die de rijen in feite in volgorde van recordtijd rangschikt. Aan de andere kant is de primaire sleutel in MongoDB een uniek veld voor het bewaren van een document en om ervoor te zorgen dat geïndexeerde velden geen dubbele waarden opslaan.

Multiplenines Word een MongoDB DBA - MongoDB naar productie brengenLeer over wat u moet weten om MongoDB gratis te implementeren, bewaken, beheren en schalen

Correlatie tussen SQL en MongoDB

Laten we zeggen dat we studentgegevens hebben en dat we deze gegevens willen vastleggen in zowel de SQL-database als MongoDB. We kunnen een eenvoudig studentobject definiëren als:

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

Bij het maken van een SQL-tabel moeten we de kolomnamen en het gegevenstype definiëren, terwijl in MongoDB automatisch een verzameling wordt gemaakt tijdens de eerste invoeging.

De onderstaande tabel helpt ons te begrijpen hoe sommige SQL-instructies in MongoDB kunnen worden geschreven.

SQL-schema-instructie MongoDB-schemaverklaringen
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

Een document in de database invoegen

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

We kunnen een schemaontwerp definiëren met behulp van enkele modules zoals mangoest en de velden definiëren als een object in plaats van direct een document in te voegen om de correlatie te tonen. De primaire gearchiveerde id wordt automatisch gegenereerd tijdens het invoegen van een document.

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

Een nieuw document invoegen om de collectie te maken

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

Het ADD-statement gebruiken om een ​​nieuwe kolom aan de bestaande tabel toe te voegen.

ALTER TABLE students ADD units 10

De structuur van incassodocumenten is niet goed gedefinieerd en update daarom documenten op documentniveau met de updateMany()

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

Een kolom neerzetten (eenheden)

ALTER TABLE students DROP COLUMN units

Een veld (eenheden) neerzetten

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

Een tafel laten vallen studenten

DROP TABLE students

Collectiestudenten laten vallen

db.students.drop()
SQL Select-instructie MongoDB-statements vinden

Selecteer alle rijen

SELECT * FROM students

Selecteer alle documenten

db.students.find()

Alleen specifieke kolommen retourneren.

SELECT name, grade FROM students

Alleen specifieke velden retourneren. Standaard wordt het veld _id geretourneerd, tenzij anders aangegeven in het projectieproces.

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

De _id instellen:0 betekent dat alleen het geretourneerde document de naam en de waarde van het cijferobject heeft.

Om specifieke rij(en) te selecteren met een overeenkomende kolomwaarde.

SELECT * FROM students WHERE grade = “A”

Om specifieke documenten te selecteren met een overeenkomende veldwaarde.

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

Rijen selecteren met een kolom waarvan de waarden enkele tekens bevatten als de opgegeven criteriawaarde

SELECT * FROM students WHERE name like  “James%”

Documenten selecteren met een veld waarvan de waarden enkele tekens bevatten als de opgegeven criteriawaarde

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

Om de rijen in oplopende volgorde te retourneren met de primaire sleutel.

SELECT * FROM students ORDER BY id ASC

Om de documenten in oplopend terug te geven met de primaire sleutel

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

Geretourneerde rijen groeperen in overeenstemming met een kolom (cijfer)

SELECT DISTINCT (grade) FROM students

Geretourneerde documenten groeperen in overeenstemming met een bepaald veld (cijfer)

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

Het aantal geretourneerde rijen beperken en enkele overslaan

SELECT * FROM students LIMIT 1 SKIP 4

Het aantal geretourneerde documenten beperken en rijen overslaan

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

Een essentiële optie is om te weten hoe onze query wordt uitgevoerd, gebruik daarom de explain-methode.

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

Werk de cijferkolom bij voor studenten van wie de leeftijd gelijk is aan 15 of hoger

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

Hier gebruiken we enkele operatoren zoals $gt, $lt en $lte.

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

Een kolomwaarde verhogen

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
SQL delete-instructie MongoDB-verklaringen verwijderen

Alle rijen verwijderen

DELETE FROM students

Om alle documenten te verwijderen.

db.students.remove({})

Om een ​​specifieke rij te verwijderen waar een kolom een ​​specifieke waarde heeft.

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

Met deze voorbeeldtabel voor toewijzingen krijgt u een beter begrip van wat we in ons volgende onderwerp gaan leren.

SQL en Studio 3T

Studio 3T is een van de beschikbare programma's die helpt om SQL en MongoDB met elkaar te verbinden. Het heeft een SQL Query-functie voor het verbeteren van een om SQL te manipuleren. De query wordt geïnterpreteerd in Mongo-shell om een ​​eenvoudige querycode te produceren in MongoDB-taalequivalent. Naast het uitvoeren van eenvoudige query's, kan de Studio 3T-applicatie nu ook joins doen.

Voor onze voorbeeldgegevens hierboven kunnen we, nadat we uw database in Studio 3T hebben aangesloten, het SQL-venster gebruiken om het document te vinden dat aan onze criteria voldoet, namelijk:

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

Als u een document met naamveld hebt ingesteld op de waarde James, wordt dit geretourneerd. Evenzo, als u op de querycode-tab klikt, krijgt u een venster te zien met de equivalente MongoDB-code. Voor de bovenstaande verklaring hebben we:

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

Samenvatting

Soms wil je misschien een snelle manier van interactie met MongoDB vanuit de kennis die je hebt over SQL. We hebben enkele basiscode-overeenkomsten geleerd tussen SQL en het equivalent daarvan in MongoDB. Verder hebben sommige programma's, zoals Studio 3T, gevestigde tools om de SQL-query om te zetten in MongoDB-equivalente taal en deze query te verfijnen voor betere resultaten. Welnu, voor de meesten van ons zal dit een geweldig hulpmiddel zijn om ons werk gemakkelijk te maken en ervoor te zorgen dat de code die we uiteindelijk hebben, zeer optimaal is voor de prestaties van onze database. In deel 2 van deze blog gaan we leren over SQL INNER JOIN in MongoDB.


  1. Wat is de juiste manier om te indexeren in MongoDB als er een grote combinatie van velden bestaat?

  2. Welke van de NoSQL-databases kan, indien aanwezig, een stroom van *wijzigingen* aan een queryresultatenset leveren?

  3. Heroku-achtergrondtaken uitvoeren met slechts 1 web-dyno en 0 worker-dyno's

  4. MongoParseError:opties useCreateIndex, useFindAndModify worden niet ondersteund