sql >> Databáze >  >> NoSQL >> MongoDB

Propojování a vytváření spojení MongoDB pomocí SQL:Část 1

SQL je nejvíce preferovaný způsob zapojení relačních databází, pokud jde o dotazování. Je zřejmé, že uživatelé by pracovali s relačními databázemi, jako je MySQL a PostgreSQL, které využívají funkci dotazování SQL. Obecně je SQL snadno srozumitelný, a proto se stal široce používaným zejména v relačních databázích.

Při pokusu o zapojení široké sady dokumentů do databáze je však SQL poměrně složitý. Stručně řečeno, není určen pro databáze dokumentů, protože přichází s řadou neúspěchů. Například se nemůžete snadno dotazovat na dokumenty vestavěného pole nebo spíše budete muset navrhnout podprogram, který bude iterovat a filtrovat vrácená data, aby poskytl požadované výsledky. V důsledku toho to povede k prodloužení doby provádění. Ale dobrá znalost SQL poskytne lepší základ pro interakci s MongoDB od určitého bodu, než začít od nuly.

V tomto blogu budeme používat program Studio 3T k zobrazení různých připojovacích dotazů SQL a toho, jak je můžete přepracovat na dotazy MongoDB, abyste dosáhli lepšího výkonu. Program lze stáhnout z tohoto odkazu.

Připojení SQL k MongoDB

Existuje několik ovladačů nebo spíše rozhraní, pomocí kterých můžete pomocí SQL komunikovat s MongoDB, například ODBC. ODBC znamená Open Database Connectivity. Toto je jednoduše rozhraní, které umožňuje aplikacím přistupovat k datům v systémech správy databází pomocí SQL jako standardního procesu přístupu k těmto datům. Přichází s další výhodou interoperability, kdy jedna aplikace může přistupovat k více systémům správy databází.

V tomto blogu vytvoříme a otestujeme kód z SQL a poté jej optimalizujeme pomocí agregačního editoru pro vytvoření dotazu MongoDB.

Mapovací graf pro SQL na MongoDB

Než půjdeme do mnoha podrobností, musíme porozumět základním vztahům mezi těmito 2 databázemi, zejména klíčovými slovy v konceptu dotazování.

Terminologie a koncepty

SQL MongoDB
Tabulka
Řádek
Sloupec
Spojení tabulky
Sbírka
dokument BSON
pole
$lookup

Primární klíč v SQL definuje jedinečný sloupec, který v podstatě uspořádává řádky v pořadí podle času záznamu. Na druhou stranu primární klíč v MongoDB je jedinečné pole pro uložení dokumentu a zajištění toho, aby indexovaná pole neukládala duplicitní hodnoty.

Somenines Staňte se MongoDB DBA – Uvedení MongoDB do produkce Zjistěte, co potřebujete vědět, abyste mohli nasadit, monitorovat, spravovat a škálovat MongoDBDdownload zdarma

Korelace mezi SQL a MongoDB

Řekněme, že máme data studenta a chceme tato data zaznamenat do databáze SQL i MongoDB. Jednoduchý studentský objekt můžeme definovat jako:

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

Při vytváření SQL tabulky musíme definovat názvy sloupců a datový typ, zatímco v MongoDB se kolekce automaticky vytvoří při prvním vložení.

Níže uvedená tabulka nám pomůže pochopit, jak lze některé příkazy SQL zapsat v MongoDB.

Příkaz schématu SQL Výkazy schématu MongoDB
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

Vložení dokumentu do databáze

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

Můžeme definovat návrh schématu pomocí některých modulů, jako je mongoose, a definovat pole jako objekt, spíše než přímo vkládat dokument, abychom ukázali korelaci. ID primárního souboru bude vygenerováno automaticky během vkládání dokumentu.

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

Vložení nového dokumentu k vytvoření kolekce

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

Použití příkazu ADD k přidání nového sloupce do existující tabulky.

ALTER TABLE students ADD units 10

Struktura sbírkových dokumentů není dobře definována, a proto aktualizujte dokumenty na úrovni dokumentů pomocí updateMany()

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

Vypuštění sloupce (jednotek)

ALTER TABLE students DROP COLUMN units

Chcete-li vypustit pole (jednotky)

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

Chcete-li upustit stůl studenti

DROP TABLE students

Chcete-li vyřadit studenty ze sbírky

db.students.drop()
Příkaz SQL Select Příkazy hledání MongoDB

Vyberte všechny řádky

SELECT * FROM students

Vyberte všechny dokumenty

db.students.find()

Chcete-li vrátit pouze určité sloupce.

SELECT name, grade FROM students

Chcete-li vrátit pouze konkrétní pole. Ve výchozím nastavení je vráceno pole _id, pokud není v procesu projekce uvedeno jinak.

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

Nastavení _id:0 znamená, že pouze vrácený dokument bude mít pouze hodnoty názvu a hodnocení.

Chcete-li vybrat konkrétní řádek(y) s nějakou odpovídající hodnotou sloupce.

SELECT * FROM students WHERE grade = “A”

Chcete-li vybrat konkrétní dokument(y) s nějakou odpovídající hodnotou pole.

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

Výběr řádků se sloupcem, jehož hodnoty obsahují některé znaky jako zadaná hodnota kritéria

SELECT * FROM students WHERE name like  “James%”

Výběr dokumentů s polem, jehož hodnoty obsahují některé znaky jako zadaná hodnota kritéria

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

Chcete-li vrátit řádky ve vzestupném pořadí pomocí primárního klíče.

SELECT * FROM students ORDER BY id ASC

Chcete-li vrátit dokumenty vzestupně pomocí primárního klíče

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

Seskupit vrácené řádky podle nějakého sloupce (stupně)

SELECT DISTINCT (grade) FROM students

Seskupit vrácené dokumenty podle nějakého pole (stupně)

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

Omezení počtu vrácených řádků a přeskočení některých

SELECT * FROM students LIMIT 1 SKIP 4

Omezení počtu vrácených dokumentů a přeskakování řádků

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

Základní možností je vědět, jak se náš dotaz provádí, a proto použijte metodu vysvětlení.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
Příkaz aktualizace SQL Prohlášení o aktualizaci MongoDB

Aktualizujte sloupec hodnocení pro studenty, jejichž věk je 15 nebo více

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

Zde používáme některé operátory jako $gt, $lt a $lte.

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

Zvýšení některé hodnoty sloupce

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
příkaz SQL delete Příkazy k odstranění MongoDB

Chcete-li odstranit všechny řádky

DELETE FROM students

Chcete-li odstranit všechny dokumenty.

db.students.remove({})

Chcete-li odstranit konkrétní řádek, kde má některý sloupec určitou hodnotu.

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

Tato vzorová mapovací tabulka vám umožní lépe porozumět tomu, co se naučíme v našem dalším tématu.

SQL a Studio 3T

Studio 3T je jedním z dostupných programů, který pomáhá propojit SQL a MongoDB. Má funkci SQL Query pro vylepšení manipulace s SQL. Dotaz je interpretován do prostředí Mongo, aby se vytvořil jednoduchý kód dotazu v ekvivalentu jazyka MongoDB. Kromě jednoduchých dotazů nyní aplikace Studio 3T umí provádět připojení.

Pro naše ukázková data výše, po připojení vaší databáze ve Studiu 3T, můžeme použít okno SQL k nalezení dokumentu, který odpovídá našim kritériím, tj.:

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

Pokud máte dokument s polem názvu nastaveným na hodnotu James, bude vrácen. Podobně, pokud kliknete na záložku kódu dotazu, zobrazí se vám okno s ekvivalentním kódem MongoDB. Pro tvrzení výše budeme mít:

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

Shrnutí

Někdy možná budete chtít rychlý způsob interakce s MongoDB ze znalostí, které máte o SQL. Naučili jsme se některé základní podobnosti kódu mezi SQL a jeho ekvivalentem v MongoDB. Dále některé programy, jako je Studio 3T, mají dobře zavedené nástroje pro převod SQL dotazu do ekvivalentního jazyka MongoDB a doladí tento dotaz pro lepší výsledky. Pro většinu z nás to bude skvělý nástroj, který nám usnadní práci a zajistí, že jakýkoli kód, který nakonec máme, bude velmi optimální pro výkon naší databáze. V části 2 tohoto blogu se dozvíme o SQL INNER JOIN v MongoDB.


  1. Laravel 5.1 Session a Socket.IO + Redis – Odesílání upozornění přihlášeným (známým) uživatelům a skupině uživatelů

  2. Získejte název měsíce z data v SQL

  3. Zavolat funkci uvnitř agregátu mongodb?

  4. Chyba Redigo ScanStruct s time.Time