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

Collegamento e creazione di join MongoDB tramite SQL:parte 1

SQL è il modo più preferito per coinvolgere i database relazionali per quanto riguarda le query. Resta inteso che gli utenti avrebbero lavorato con database relazionali come MySQL e PostgreSQL che utilizzano la funzione di query SQL. In generale, SQL è facile da capire e quindi è diventato ampiamente utilizzato soprattutto nei database relazionali.

Tuttavia, SQL è piuttosto complesso quando si tenta di coinvolgere un'ampia serie di documenti in un database. In poche parole, non è destinato ai database di documenti poiché presenta una serie di battute d'arresto. Ad esempio, non è possibile interrogare facilmente i documenti di array incorporati o piuttosto sarà necessario progettare un sottoprogramma per iterare e filtrare i dati restituiti per fornire i risultati richiesti. Di conseguenza, ciò comporterà un incremento della durata dell'esecuzione. Ma avere una buona comprensione di SQL fornirà un terreno migliore per interagire con MongoDB da un certo punto piuttosto che iniziare da zero.

In questo blog utilizzeremo il programma Studio 3T per mostrare le varie query di join SQL e come riprogettarle in query MongoDB per ottenere prestazioni migliori. Il programma può essere scaricato da questo link.

Collegamento di SQL a MongoDB

Esistono diversi driver o meglio interfacce attraverso le quali è possibile utilizzare SQL per comunicare con MongoDB, ad esempio ODBC. ODBC sta per Open Database Connectivity. Si tratta semplicemente di un'interfaccia che consente alle applicazioni di accedere ai dati nei sistemi di gestione dei database utilizzando SQL come processo standard di accesso a tali dati. Viene fornito con un ulteriore vantaggio di interoperabilità per cui una singola applicazione può accedere a più sistemi di gestione di database.

In questo blog, produrremo e testeremo il codice da SQL e quindi lo ottimizzeremo tramite un editor di aggregazione per produrre una query MongoDB.

Mappatura del grafico da SQL a MongoDB

Prima di entrare in molti dettagli, dobbiamo comprendere le relazioni di base tra questi 2 database, in particolare le parole chiave nel concetto di query.

Terminologia e concetti

SQL MongoDB
Tabella
Riga
Colonna
Join di tabelle
Raccolta
Documento BSON
Campo
$lookup

La chiave primaria in SQL definisce una colonna univoca che sostanzialmente dispone le righe in ordine di tempo record. D'altra parte, la chiave primaria in MongoDB è un campo univoco per contenere un documento e garantire che i campi indicizzati non memorizzino valori duplicati.

Multiplenines Diventa un DBA MongoDB - Portare MongoDB in produzioneScopri cosa devi sapere per distribuire, monitorare, gestire e ridimensionare MongoDBScarica gratuitamente

Correlazione tra SQL e MongoDB

Diciamo che abbiamo i dati di uno studente e vogliamo registrare questi dati sia nel database SQL che in MongoDB. Possiamo definire un semplice oggetto studente come:

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

Nella creazione di una tabella SQL, dobbiamo definire i nomi delle colonne e il tipo di dati mentre in MongoDB verrà creata automaticamente una raccolta durante il primo inserimento.

La tabella seguente ci aiuterà a capire come alcune delle istruzioni SQL possono essere scritte in MongoDB.

Istruzione dello schema SQL Istruzioni dello schema MongoDB
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

Per inserire un documento nel database

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

Possiamo definire un progetto di schema utilizzando alcuni moduli come mangusta e definire i campi come un oggetto piuttosto che inserire un documento direttamente per mostrare la correlazione. L'ID archiviato principale verrà generato automaticamente durante l'inserimento di un documento.

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

Inserimento di un nuovo documento per creare la collezione

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

Utilizzo dell'istruzione ADD per aggiungere una nuova colonna alla tabella esistente.

ALTER TABLE students ADD units 10

La struttura dei documenti di raccolta non è ben definita e quindi aggiorna i documenti a livello di documento utilizzando updateMany()

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

Per eliminare una colonna (unità)

ALTER TABLE students DROP COLUMN units

Per eliminare un campo (unità)

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

Per eliminare un tavolo studenti

DROP TABLE students

Per eliminare gli studenti della raccolta

db.students.drop()
Istruzione SQL Select MongoDB trova dichiarazioni

Seleziona tutte le righe

SELECT * FROM students

Seleziona tutti i documenti

db.students.find()

Per restituire solo colonne specifiche.

SELECT name, grade FROM students

Per restituire solo campi specifici. Per impostazione predefinita, il campo _id viene restituito se non diversamente specificato nel processo di proiezione.

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

L'impostazione di _id:0 significa che solo il documento restituito avrà solo il nome e i valori dell'oggetto voto.

Per selezionare righe specifiche con un valore di colonna corrispondente.

SELECT * FROM students WHERE grade = “A”

Per selezionare documenti specifici con un valore di campo corrispondente.

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

Selezione di righe con una colonna i cui valori hanno alcuni caratteri come valore del criterio fornito

SELECT * FROM students WHERE name like  “James%”

Selezione di documenti con un campo i cui valori hanno alcuni caratteri come valore del criterio fornito

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

Per restituire le righe in ordine crescente utilizzando la chiave primaria.

SELECT * FROM students ORDER BY id ASC

Per restituire i documenti in ordine crescente utilizzando la chiave primaria

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

Raggruppare le righe restituite in base a una colonna (voto)

SELECT DISTINCT (grade) FROM students

Raggruppare i documenti restituiti in base a un campo (grado)

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

Limitare il numero di righe restituite e saltarne alcune

SELECT * FROM students LIMIT 1 SKIP 4

Limitare il numero di documenti restituiti e saltare le righe

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

Un'opzione essenziale è sapere come viene eseguita la nostra query, quindi utilizzare il metodo di spiegazione.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
Istruzione di aggiornamento SQL Dichiarazioni di aggiornamento MongoDB

Aggiorna la colonna del voto per gli studenti la cui età è uguale o superiore a 15 anni

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

Qui utilizziamo alcuni operatori come $gt, $lt e $lte.

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

Incremento di alcuni valori di colonna

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
Istruzione di eliminazione SQL MongoDB rimuove le istruzioni

Per eliminare tutte le righe

DELETE FROM students

Per eliminare tutti i documenti.

db.students.remove({})

Per eliminare una riga specifica in cui una colonna ha un valore specifico.

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

Questa tabella di mappatura di esempio ti consentirà di comprendere meglio ciò che impareremo nel prossimo argomento.

SQL e Studio 3T

Studio 3T è uno dei programmi disponibili che aiuta a connettere SQL e MongoDB. Ha una funzione di query SQL per migliorarne una per manipolare SQL. La query viene interpretata nella shell Mongo per produrre un semplice codice di query nell'equivalente del linguaggio MongoDB. Oltre a eseguire semplici query, l'applicazione Studio 3T ora può eseguire join.

Per i nostri dati di esempio sopra, dopo aver collegato il database in Studio 3T, possiamo utilizzare la finestra SQL per trovare il documento che corrisponde ai nostri criteri, ad esempio:

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

Se hai un documento con il campo del nome impostato sul valore James, verrà restituito. Allo stesso modo, se fai clic sulla scheda del codice della query, ti verrà presentata una finestra con il codice MongoDB equivalente. Per la dichiarazione sopra, avremo:

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

Riepilogo

A volte potresti volere un modo rapido per interagire con MongoDB dalla conoscenza che hai su SQL. Abbiamo appreso alcune somiglianze di codice di base tra SQL e il suo equivalente in MongoDB. Inoltre, alcuni programmi come Studio 3T dispongono di strumenti ben consolidati per convertire la query SQL in un linguaggio equivalente a MongoDB e ottimizzare questa query per ottenere risultati migliori. Bene, per la maggior parte di noi, questo sarà un ottimo strumento per semplificare il nostro lavoro e garantire che qualsiasi codice abbiamo alla fine sia ottimale per le prestazioni del nostro database. Nella parte 2 di questo blog, impareremo a conoscere SQL INNER JOIN in MongoDB.