MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Свързване и създаване на MongoDB присъединявания с помощта на SQL:Част 1

SQL е най-предпочитаният начин за ангажиране на релационни бази данни, що се отнася до заявките. Разбираемо е, че потребителите биха работили с релационни бази данни като MySQL и PostgreSQL, които използват функцията за SQL заявки. Като цяло SQL е лесен за разбиране и затова стана широко използван, особено в релационни бази данни.

Въпреки това, SQL е доста сложен, когато се опитвате да ангажирате широк набор от документи в база данни. Накратко, той не е предназначен за бази данни с документи, тъй като идва с редица неуспехи. Например, не можете да заявявате с лекота документи за вграден масив или по-скоро ще трябва да проектирате подпрограма за повторение и филтриране на върнатите данни, за да дадете необходимите резултати. Следователно това ще доведе до увеличаване на продължителността на изпълнение. Но доброто разбиране на SQL ще осигури по-добра основа за взаимодействие с MongoDB от някакъв момент, вместо да се започва от нулата.

В този блог ще използваме програмата Studio 3T, за да покажем различните SQL заявки за присъединяване и как можете да ги преработите в MongoDB заявки, за да постигнете по-добра производителност. Програмата може да бъде изтеглена от тази връзка.

Свързване на SQL към MongoDB

Има няколко драйвера или по-скоро интерфейси, чрез които можете да използвате SQL за комуникация с MongoDB, например ODBC. ODBC означава Open Database Connectivity. Това е просто интерфейс, който позволява на приложенията да имат достъп до данни в системите за управление на бази данни, използвайки SQL като стандартен процес за достъп до тези данни. Той идва с допълнително предимство на оперативната съвместимост, при което едно приложение може да има достъп до множество системи за управление на бази данни.

В този блог ще произведем и тестваме код от SQL и след това ще го оптимизираме чрез редактор за агрегиране, за да произведем заявка за MongoDB.

Маппинг диаграма за SQL към MongoDB

Преди да навлезем в много подробности, трябва да разберем основните връзки между тези 2 бази данни, особено ключовите думи в концепцията за заявка.

Терминология и концепции

SQL MongoDB
Таблица
Ред
Колона
Таблица се присъединява
Колекция
BSON документ
Поле
$lookup

Първичният ключ в SQL дефинира уникална колона, която основно подрежда редовете по реда на времето на запис. От друга страна, първичният ключ в MongoDB е уникално поле за съхраняване на документ и гарантиране, че индексираните полета не съхраняват дублиращи се стойности.

Severalnines Станете DBA на MongoDB – Пренасяне на MongoDB в Производството Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате MongoDB Изтеглете безплатно

Връзка между SQL и MongoDB

Да кажем, че имаме студентски данни и искаме да запишем тези данни както в SQL база данни, така и в MongoDB. Можем да дефинираме прост студентски обект като:

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

При създаването на SQL таблица трябва да дефинираме имената на колоните и типа данни, докато в MongoDB колекцията ще бъде създадена автоматично по време на първото вмъкване.

Таблицата по-долу ще ни помогне да разберем как някои от SQL изразите могат да бъдат написани в MongoDB.

Изявление за SQL схема Изявления за схема на MongoDB
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

За да вмъкнете документ в базата данни

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

Можем да дефинираме дизайн на схема с помощта на някои модули като mongoose и да дефинираме полетата като обект, вместо да вмъкваме документ директно, за да покажем корелацията. Идентификаторът на първичния файл ще бъде генериран автоматично по време на вмъкването на документ.

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

Вмъкване на нов документ за създаване на колекция

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

Използване на оператора ADD за добавяне на нова колона към съществуващата таблица.

ALTER TABLE students ADD units 10

Структурата на документите за събиране не е добре дефинирана и следователно актуализирайте документите на ниво документ с помощта на updateMany()

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

За да пуснете колона (единици)

ALTER TABLE students DROP COLUMN units

За да пуснете поле (единици)

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

За пускане на маса ученици

DROP TABLE students

За да оставите студенти за събиране

db.students.drop()
Изявление за избор на SQL Изявления за намиране на MongoDB

Изберете всички редове

SELECT * FROM students

Изберете всички документи

db.students.find()

За връщане само на конкретни колони.

SELECT name, grade FROM students

За връщане само на конкретни полета. По подразбиране полето _id се връща, освен ако не е посочено друго в процеса на проектиране.

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

Задаването на _id:0 означава, че само върнатият документ ще има само името и стойностите на обекта за оценка.

За да изберете конкретен ред(и) със съвпадаща стойност на колоната.

SELECT * FROM students WHERE grade = “A”

За да изберете конкретен(и) документ(и) с някаква съответстваща стойност на полето.

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

Избиране на редове с колона, чиито стойности имат някои знаци като предоставена стойност на критерии

SELECT * FROM students WHERE name like  “James%”

Избиране на документи с поле, чиито стойности съдържа някои символи като предоставена стойност на критерии

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

За да върнете редовете във възходящ ред, като използвате първичния ключ.

SELECT * FROM students ORDER BY id ASC

За да върнете документите във възходящо, като използвате първичния ключ

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

За групиране на върнатите редове в съответствие с някаква колона (степен)

SELECT DISTINCT (grade) FROM students

За групиране на върнатите документи в съответствие с някакво поле (степен)

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

Ограничаване на броя на върнатите редове и пропускане на някои

SELECT * FROM students LIMIT 1 SKIP 4

Ограничаване на броя на върнатите документи и пропускане на редове

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

Основна опция е да знаете как се изпълнява нашата заявка, следователно използвайте метода за обяснение.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
Изявление за актуализиране на SQL Изявления за актуализиране на MongoDB

Актуализирайте колоната за оценки за ученици, чиято възраст е равна на 15 или повече

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

Тук използваме някои оператори като $gt, $lt и $lte.

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

Увеличаване на стойност на колона

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
SQL оператор за изтриване Изказвания за премахване на MongoDB

За да изтриете всички редове

DELETE FROM students

За да изтриете всички документи.

db.students.remove({})

За да изтриете конкретен ред, където някоя колона има конкретна стойност.

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

Тази примерна таблица за картографиране ще ви позволи да разберете по-добре какво ще научим в следващата ни тема.

SQL и Studio 3T

Studio 3T е една от наличните програми, която помага за свързването на SQL и MongoDB. Той има функция за SQL заявка за подобряване на такава за манипулиране на SQL. Заявката се интерпретира в обвивката на Mongo, за да произведе прост код на заявка в еквивалент на езика MongoDB. Освен да прави прости заявки, приложението Studio 3T вече може да прави присъединявания.

За нашите примерни данни по-горе, след като свържете вашата база данни в Studio 3T, можем да използваме SQL прозореца, за да намерим документа, който отговаря на нашите критерии, т.е.:

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

Ако имате документ с поле за име, зададено на стойност Джеймс, тогава той ще бъде върнат. По същия начин, ако щракнете върху раздела с код на заявка, ще ви бъде представен прозорец с еквивалентния код на MongoDB. За изявлението по-горе ще имаме:

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

Резюме

Понякога може да искате бърз начин за взаимодействие с MongoDB от знанията, които имате за SQL. Научихме някои основни прилики в кода между SQL и неговия еквивалент в MongoDB. Освен това някои програми като Studio 3T имат добре утвърдени инструменти за преобразуване на SQL заявката в език, еквивалентен на MongoDB и прецизират тази заявка за по-добри резултати. Е, за повечето от нас това ще бъде чудесен инструмент за улесняване на нашата работа и гарантиране, че кодът, който имаме в крайна сметка, е много оптимален за работата на нашата база данни. В част 2 от този блог ще научим за SQL INNER JOIN в MongoDB.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $setIsSubset

  2. Внедряване на пагинация с MongoDB, Express.js и Slush

  3. Етапи на MongoDB Aggregation Framework и тръбопроводи

  4. MongoDB - как да потърся вложен елемент в колекция?

  5. MongoDB $dateToParts