MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Łączenie i tworzenie złączeń MongoDB za pomocą SQL:część 1

SQL jest najbardziej preferowanym sposobem angażowania relacyjnych baz danych w zakresie zapytań. Zrozumiałe jest, że użytkownicy pracowaliby z relacyjnymi bazami danych, takimi jak MySQL i PostgreSQL, które wykorzystują funkcję zapytań SQL. Ogólnie rzecz biorąc, SQL jest łatwy do zrozumienia i dlatego stał się szeroko stosowany, zwłaszcza w relacyjnych bazach danych.

Jednak SQL jest dość złożony, gdy próbuje się zaangażować szeroki zestaw dokumentów w bazie danych. Krótko mówiąc, nie jest przeznaczony do baz danych dokumentów, ponieważ ma wiele wad. Na przykład, nie można z łatwością przeszukiwać dokumentów osadzonej tablicy, a raczej trzeba zaprojektować podprogram do iteracji i filtrowania zwracanych danych w celu uzyskania wymaganych wyników. W konsekwencji spowoduje to zwiększenie czasu wykonania. Ale dobre zrozumienie SQL zapewni lepsze podstawy do interakcji z MongoDB od pewnego momentu, zamiast zaczynać od zera.

W tym blogu będziemy używać programu Studio 3T, aby pokazać różne zapytania sprzężenia SQL i sposoby ich przeprojektowania na zapytania MongoDB w celu uzyskania lepszej wydajności. Program można pobrać z tego linku.

Łączenie SQL z MongoDB

Istnieje kilka sterowników, a raczej interfejsów, przez które można używać SQL do komunikacji z MongoDB, na przykład ODBC. ODBC to skrót od Open Database Connectivity. Jest to po prostu interfejs, który umożliwia aplikacjom dostęp do danych w systemach zarządzania bazami danych przy użyciu SQL jako standardowego procesu uzyskiwania dostępu do tych danych. Ma dodatkową zaletę interoperacyjności, dzięki której pojedyncza aplikacja może uzyskać dostęp do wielu systemów zarządzania bazami danych.

W tym blogu będziemy tworzyć i testować kod z SQL, a następnie optymalizować go za pomocą edytora agregacji, aby utworzyć zapytanie MongoDB.

Mapowanie wykresu dla SQL do MongoDB

Zanim przejdziemy do wielu szczegółów, musimy zrozumieć podstawowe relacje między tymi 2 bazami danych, zwłaszcza słowa kluczowe w koncepcji zapytań.

Terminologia i koncepcje

SQL MongoDB
Tabela
Wiersz
Kolumna
Łączenia tabel
Kolekcja
Dokument BSON
Pole
$lookup

Klucz podstawowy w SQL definiuje unikalną kolumnę, która zasadniczo porządkuje wiersze według czasu zapisu. Z drugiej strony klucz podstawowy w MongoDB jest unikalnym polem do przechowywania dokumentu i zapewnia, że ​​indeksowane pola nie przechowują zduplikowanych wartości.

Kilkadziesiąt — Zostań administratorem baz danych MongoDB — wprowadzenie MongoDB do produkcjiDowiedz się, co trzeba wiedzieć, aby wdrażać, monitorować, zarządzać i skalować MongoDB. Pobierz za darmo

Korelacja między SQL i MongoDB

Załóżmy, że mamy dane ucznia i chcemy je zapisać zarówno w bazie danych SQL, jak i MongoDB. Możemy zdefiniować prosty obiekt ucznia jako:

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

Tworząc tabelę SQL, musimy zdefiniować nazwy kolumn i typ danych, podczas gdy w MongoDB kolekcja zostanie utworzona automatycznie podczas pierwszego wstawiania.

Poniższa tabela pomoże nam zrozumieć, w jaki sposób niektóre instrukcje SQL można napisać w MongoDB.

Schemat SQL Wyciągi schematu MongoDB
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

Aby wstawić dokument do bazy danych

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

Możemy zdefiniować projekt schematu za pomocą niektórych modułów, takich jak mangusta, i zdefiniować pola jak obiekt, zamiast wstawiać dokument bezpośrednio, aby pokazać korelację. Główny identyfikator pola zostanie wygenerowany automatycznie podczas wstawiania dokumentu.

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

Wstawianie nowego dokumentu w celu utworzenia kolekcji

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

Użycie instrukcji ADD, aby dodać nową kolumnę do istniejącej tabeli.

ALTER TABLE students ADD units 10

Struktura dokumentów kolekcji nie jest dobrze zdefiniowana, dlatego aktualizuj dokumenty na poziomie dokumentu za pomocą funkcji updateMany()

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

Aby upuścić kolumnę (jednostki)

ALTER TABLE students DROP COLUMN units

Aby upuścić pole (jednostki)

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

Aby upuścić tabelę uczniowie

DROP TABLE students

Aby usunąć uczniów z kolekcji

db.students.drop()
Instrukcja SQL Select Wyciągi wyszukiwania MongoDB

Wybierz wszystkie wiersze

SELECT * FROM students

Wybierz wszystkie dokumenty

db.students.find()

Aby zwrócić tylko określone kolumny.

SELECT name, grade FROM students

Aby zwrócić tylko określone pola. Domyślnie zwracane jest pole _id, chyba że w procesie projekcji określono inaczej.

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

Ustawienie _id:0 oznacza, że ​​tylko zwrócony dokument będzie miał tylko nazwę i wartości obiektu oceny.

Aby wybrać określone wiersze z odpowiednią wartością kolumny.

SELECT * FROM students WHERE grade = “A”

Aby wybrać określony dokument(y) z odpowiednią wartością pola.

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

Wybieranie wierszy z kolumną, której wartości mają kilka znaków jako wartość podanego kryterium

SELECT * FROM students WHERE name like  “James%”

Wybieranie dokumentów z polem, którego wartość zawiera kilka znaków jako wartość podanego kryterium

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

Aby zwrócić wiersze w kolejności rosnącej za pomocą klucza podstawowego.

SELECT * FROM students ORDER BY id ASC

Aby zwrócić dokumenty rosnąco za pomocą klucza podstawowego

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

Aby pogrupować zwrócone wiersze zgodnie z jakąś kolumną (oceną)

SELECT DISTINCT (grade) FROM students

Grupowanie zwracanych dokumentów zgodnie z pewnym polem (oceną)

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

Ograniczanie liczby zwracanych wierszy i pomijanie niektórych

SELECT * FROM students LIMIT 1 SKIP 4

Ograniczenie liczby zwracanych dokumentów i pomijanie wierszy

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

Podstawową opcją jest wiedzieć, jak nasze zapytanie jest wykonywane, dlatego użyj metody wyjaśnij.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
Oświadczenie SQL Update Wyciągi dotyczące aktualizacji MongoDB

Zaktualizuj kolumnę ocen dla uczniów w wieku co najmniej 15 lat

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

Tutaj używamy niektórych operatorów, takich jak $gt, $lt i $lte.

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

Zwiększanie wartości niektórych kolumn

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
Instrukcja usunięcia SQL MongoDB usuń wyciągi

Aby usunąć wszystkie wiersze

DELETE FROM students

Aby usunąć wszystkie dokumenty.

db.students.remove({})

Aby usunąć określony wiersz, w którym jakaś kolumna ma określoną wartość.

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

Ta przykładowa tabela mapowania pozwoli Ci lepiej zrozumieć, czego nauczymy się w następnym temacie.

SQL i Studio 3T

Studio 3T to jeden z dostępnych programów, który pomaga łączyć SQL i MongoDB. Posiada funkcję SQL Query do ulepszania jednego do manipulowania SQL. Zapytanie jest interpretowane w powłoce Mongo w celu utworzenia prostego kodu zapytania w odpowiedniku języka MongoDB. Oprócz wykonywania prostych zapytań aplikacja Studio 3T może teraz wykonywać połączenia.

W przypadku naszych przykładowych danych powyżej, po połączeniu bazy danych w Studio 3T, możemy użyć okna SQL, aby znaleźć dokument spełniający nasze kryteria, tj.:

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

Jeśli masz dokument z polem nazwy ustawionym na wartość James, zostanie on zwrócony. Podobnie, jeśli klikniesz na zakładkę z kodem zapytania, pojawi się okno z równoważnym kodem MongoDB. W przypadku powyższego oświadczenia będziemy mieć:

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

Podsumowanie

Czasami możesz potrzebować szybkiego sposobu interakcji z MongoDB na podstawie posiadanej wiedzy na temat SQL. Poznaliśmy podstawowe podobieństwa kodu między SQL a jego odpowiednikiem w MongoDB. Co więcej, niektóre programy, takie jak Studio 3T, mają dobrze ugruntowane narzędzia do konwersji zapytania SQL na język równoważny MongoDB i dostrajania tego zapytania w celu uzyskania lepszych wyników. Cóż, dla większości z nas będzie to świetne narzędzie ułatwiające naszą pracę i zapewniające, że nasz kod jest bardzo optymalny dla wydajności naszej bazy danych. W części 2 tego bloga dowiemy się o SQL INNER JOIN w MongoDB.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Znajdź przy użyciu _id nie działa z agregacją

  2. Różnica między przechowywaniem identyfikatora ObjectId a jego postacią ciągu w MongoDB

  3. MongoDB $setOnInsert

  4. Utwórz bazę danych w MongoDB

  5. NoSQL (MongoDB) vs Lucene (lub Solr) jako Twoja baza danych