sql >> Database teknologi >  >> NoSQL >> MongoDB

Sammenkædning og oprettelse af MongoDB-forbindelser ved hjælp af SQL:Del 1

SQL er den mest foretrukne måde at engagere relationelle databaser på, hvad angår forespørgsler. Det er underforstået, at brugere ville have arbejdet med relationelle databaser såsom MySQL og PostgreSQL, der anvender SQL-forespørgselsfunktionen. Generelt er SQL let at forstå og blev derfor meget brugt, især i relationelle databaser.

SQL er dog ret kompleks, når man forsøger at engagere et bredt sæt dokumenter i en database. I en nøddeskal er det ikke beregnet til dokumentdatabaser, da det kommer med en række tilbageslag. For eksempel kan du ikke forespørge indlejrede array-dokumenter med lethed, eller rettere, du bliver nødt til at designe et underprogram til at gentage og filtrere returnerede data for at give de nødvendige resultater. Dette vil følgelig resultere i en forøgelse af eksekveringsvarigheden. Men at have en god forståelse af SQL vil give et bedre grundlag for at interagere med MongoDB fra et tidspunkt i stedet for at starte fra bunden.

I denne blog vil vi bruge Studio 3T-programmet til at vise de forskellige SQL join-forespørgsler, og hvordan du kan omdesigne dem til MongoDB-forespørgsler for at opnå bedre ydeevne. Programmet kan downloades fra dette link.

Tilslutning af SQL til MongoDB

Der er flere drivere eller rettere interfaces, hvorigennem du kan bruge SQL til at kommunikere med MongoDB, for eksempel ODBC. ODBC står for Open Database Connectivity. Dette er simpelthen en grænseflade, der tillader applikationer at få adgang til data i databasestyringssystemer ved hjælp af SQL som standardprocessen til at få adgang til disse data. Det kommer med en ekstra interoperabilitetsfordel, hvorved en enkelt applikation kan få adgang til flere databasestyringssystemer.

I denne blog vil vi producere og teste kode fra SQL og derefter optimere den via en aggregeringseditor for at producere en MongoDB-forespørgsel.

Kortlægningsdiagram for SQL til MongoDB

Før vi går i detaljer, er vi nødt til at forstå de grundlæggende relationer mellem disse 2 databaser, især søgeord i forespørgselskonceptet.

Terminologi og koncepter

SQL MongoDB
Tabel
Række
Kolonne
Tabelsammenkædning
Samling
BSON-dokument
Felt
$lookup

Den primære nøgle i SQL definerer en unik kolonne, der grundlæggende arrangerer rækkerne i rækkefølge efter rekordtid. På den anden side er den primære nøgle i MongoDB et unikt felt til at opbevare et dokument og sikre, at indekserede felter ikke gemmer duplikerede værdier.

Severalnines Bliv en MongoDB DBA - Bring MongoDB to ProductionFå flere oplysninger om, hvad du skal vide for at implementere, overvåge, administrere og skalere MongoDBDownload gratis

Korrelation mellem SQL og MongoDB

Lad os sige, at vi har en elevdata, og vi ønsker at registrere disse data i både SQL-database og MongoDB. Vi kan definere et simpelt elevobjekt som:

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

Ved oprettelse af en SQL-tabel skal vi definere kolonnenavne og datatype, mens der i MongoDB automatisk oprettes en samling under den første indsættelse.

Tabellen nedenfor hjælper os med at forstå, hvordan noget af SQL-sætningen kan skrives i MongoDB.

SQL-skemaerklæring MongoDB Schema Statements
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

For at indsætte et dokument i databasen

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

Vi kan definere et skemadesign ved hjælp af nogle moduler såsom mongoose og definere felterne som et objekt i stedet for at indsætte et dokument direkte for at vise sammenhængen. Det primære arkiverede id vil blive genereret automatisk under indsættelsen af ​​et dokument.

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

Indsættelse af et nyt dokument for at oprette samlingen

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

Brug af ADD-sætningen til at tilføje en ny kolonne til den eksisterende tabel.

ALTER TABLE students ADD units 10

Strukturen af ​​indsamlingsdokumenter er ikke veldefineret, og derfor opdaterer dokumenter på dokumentniveau ved hjælp af updateMany()

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

Sådan slettes en kolonne (enheder)

ALTER TABLE students DROP COLUMN units

Sådan slettes et felt (enheder)

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

At droppe et bord studerende

DROP TABLE students

At droppe indsamlingsstuderende

db.students.drop()
SQL Select-sætning MongoDB find erklæringer

Vælg alle rækker

SELECT * FROM students

Vælg alle dokumenter

db.students.find()

For kun at returnere specifikke kolonner.

SELECT name, grade FROM students

For kun at returnere specifikke felter. Som standard returneres _id-feltet, medmindre andet er angivet i projektionsprocessen.

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

Indstilling af _id:0 betyder, at kun det returnerede dokument vil have navnet og karakterobjektets værdier.

For at vælge bestemte række(r) med en passende kolonneværdi.

SELECT * FROM students WHERE grade = “A”

For at vælge specifikke dokument(er) med en eller anden matchende feltværdi.

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

Valg af rækker med en kolonne, hvis værdier har nogle tegn som den angivne kriterieværdi

SELECT * FROM students WHERE name like  “James%”

Valg af dokumenter med et felt, hvis værdier har nogle tegn som den angivne kriterieværdi

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

For at returnere rækkerne i stigende rækkefølge ved hjælp af den primære nøgle.

SELECT * FROM students ORDER BY id ASC

For at returnere dokumenterne i stigende retning ved hjælp af den primære nøgle

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

At gruppere returnerede rækker i overensstemmelse med en kolonne (karakter)

SELECT DISTINCT (grade) FROM students

At gruppere returnerede dokumenter i overensstemmelse med et eller andet felt (karakter)

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

Begrænsning af antallet af returnerede rækker og spring nogle over

SELECT * FROM students LIMIT 1 SKIP 4

Begrænsning af antallet af returnerede dokumenter og spring over rækker

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

En væsentlig mulighed er at vide, hvordan vores forespørgsel udføres, og brug derfor forklaringsmetoden.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
SQL-opdateringserklæring MongoDB-opdateringserklæringer

Opdater karakterkolonnen for elever, hvis alder er lig med 15 år eller derover

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

Her bruger vi nogle operatorer såsom $gt, $lt og $lte.

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

Forøgelse af en eller anden kolonneværdi

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
SQL-sletningserklæring MongoDB fjerner erklæringer

For at slette alle rækker

DELETE FROM students

For at slette alle dokumenter.

db.students.remove({})

For at slette en bestemt række, hvor en kolonne har en bestemt værdi.

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

Denne eksempelkortlægningstabel vil gøre dig i stand til at få en bedre forståelse af, hvad vi skal lære i vores næste emne.

SQL og Studio 3T

Studio 3T er et af de tilgængelige programmer, der hjælper med at forbinde SQL og MongoDB. Den har en SQL Query-funktion til at forbedre en til at manipulere SQL. Forespørgslen tolkes til Mongo shell for at producere en simpel forespørgselskode i MongoDB sprogækvivalent. Udover at lave simple forespørgsler kan Studio 3T-applikationen nu lave joins.

For vores eksempeldata ovenfor, efter at have tilsluttet din database i Studio 3T, kan vi bruge SQL-vinduet til at finde det dokument, der matcher vores kriterier, dvs.:

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

Hvis du har et dokument med navnefeltet indstillet til værdien James, vil det blive returneret. På samme måde, hvis du klikker på forespørgselskodefanen, vil du blive præsenteret for et vindue med den tilsvarende MongoDB-kode. For udsagnet ovenfor vil vi have:

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

Oversigt

Nogle gange vil du måske have en hurtig måde at interagere med MongoDB fra den viden, du har om SQL. Vi har lært nogle grundlæggende kodeligheder mellem SQL og dets ækvivalent i MongoDB. Yderligere har nogle programmer såsom Studio 3T veletablerede værktøjer til at konvertere SQL-forespørgslen til MongoDB-ækvivalent sprog og finjustere denne forespørgsel for bedre resultater. Nå, for de fleste af os vil dette være et fantastisk værktøj til at gøre vores arbejde let og sikre, at den kode vi har i sidste ende er meget optimal for vores databases ydeevne. I del 2 af denne blog skal vi lære om SQL INNER JOIN i MongoDB.


  1. Vælg Grupper efter antal og særskilt antal i samme mongodb-forespørgsel

  2. Oprettelse af en redis-lytter - muligt i php?

  3. Sådan implementerer du multitenancy til Redis i springstøvler

  4. Har brug for en løsning til opslag af en streng til objectID fremmedfelt