MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Vinculando e criando junções do MongoDB usando SQL:Parte 1


SQL é a maneira preferida de envolver bancos de dados relacionais no que diz respeito à consulta. Entende-se que os usuários teriam trabalhado com bancos de dados relacionais, como MySQL e PostgreSQL, que empregam o recurso de consulta SQL. Geralmente, o SQL é fácil de entender e, portanto, tornou-se amplamente utilizado principalmente em bancos de dados relacionais.

No entanto, o SQL é bastante complexo ao tentar envolver um amplo conjunto de documentos em um banco de dados. Em poucas palavras, não se destina a bancos de dados de documentos, pois vem com vários contratempos. Por exemplo, você não pode consultar documentos de matriz incorporados com facilidade, ou melhor, você precisará projetar um subprograma para iterar e filtrar os dados retornados para fornecer os resultados necessários. Consequentemente, isso resultará em um incremento da duração da execução. Mas ter um bom entendimento em SQL fornecerá uma base melhor para interagir com o MongoDB a partir de algum ponto, em vez de começar do zero.

Neste blog, usaremos o programa Studio 3T para mostrar as várias consultas de junção SQL e como você pode redesenhá-las em consultas do MongoDB para obter melhor desempenho. O programa pode ser baixado neste link.

Conectando SQL ao MongoDB


Existem vários drivers ou interfaces através dos quais você pode usar o SQL para se comunicar com o MongoDB, por exemplo, ODBC. ODBC significa Open Database Connectivity. Esta é simplesmente uma interface que permite que aplicativos acessem dados em sistemas de gerenciamento de banco de dados usando SQL como o processo padrão de acesso a esses dados. Ele vem com uma vantagem de interoperabilidade adicional pela qual um único aplicativo pode acessar vários sistemas de gerenciamento de banco de dados.

Neste blog, produziremos e testaremos o código do SQL e o otimizaremos por meio de um editor de agregação para produzir uma consulta do MongoDB.

Gráfico de mapeamento para SQL para MongoDB


Antes de entrarmos em muitos detalhes, precisamos entender as relações básicas entre esses 2 bancos de dados, especialmente palavras-chave no conceito de consulta.

Terminologia e conceitos

SQL MongoDB
Tabela
Linha
Coluna
Junções de tabela
Coleção
Documento BSON
Campo
$lookup

A chave primária no SQL define uma coluna única que basicamente organiza as linhas em ordem de tempo de registro. Por outro lado, a chave primária no MongoDB é um campo exclusivo para armazenar um documento e garantir que os campos indexados não armazenem valores duplicados.
Vários noves Torne-se um DBA do MongoDB - Trazendo o MongoDB para a produçãoSaiba mais sobre o que você precisa saber para implantar, monitorar, gerenciar e dimensionar o MongoDBBaixe gratuitamente

Correlação entre SQL e MongoDB


Digamos que temos dados de um aluno e queremos registrar esses dados no banco de dados SQL e no MongoDB. Podemos definir um objeto aluno simples como:
{
    name: ‘James Washington’,
    age: 15,
    grade: A,
    Score: 10.5
}

Ao criar uma tabela SQL, precisamos definir os nomes das colunas e o tipo de dados, enquanto no MongoDB uma coleção será criada automaticamente durante a primeira inserção.

A tabela abaixo nos ajudará a entender como algumas das instruções SQL podem ser escritas no MongoDB.
Instrução de esquema SQL Declarações de esquema do MongoDB
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

Para inserir um documento no banco de dados
INSERT INTO students(Name, age, grade,score) VALUES(“James Washington”, 15, “A”, 10.5)

Podemos definir um projeto de esquema usando alguns módulos como mangusto e definir os campos como um objeto em vez de inserir um documento diretamente para mostrar a correlação. O id de arquivo principal será gerado automaticamente durante a inserção de um documento.
{
  name: String,
  age Number,
  score: Number
}

Inserindo um novo documento para criar a coleção
db.students.insertOne({
    name: ‘James Washington’,
    age: 15,
    grade: ‘A’,
    score: 10.5
})

Usando a instrução ADD para adicionar uma nova coluna à tabela existente.
ALTER TABLE students ADD units 10

A estrutura dos documentos de coleção não está bem definida e, portanto, atualize os documentos no nível do documento usando o método updateMany()
db.students.updateMany({}, {$set: {units: 10}})

Para soltar uma coluna (unidades)
ALTER TABLE students DROP COLUMN units

Para soltar um campo (unidades)
db.students.updateMany({}, {$unset: {units: “”}})

Para soltar uma mesa alunos
DROP TABLE students

Para largar os alunos da coleção
db.students.drop()
Instrução SQL Select Declarações de localização do MongoDB

Selecionar todas as linhas
SELECT * FROM students

Selecione todos os documentos
db.students.find()

Para retornar apenas colunas específicas.
SELECT name, grade FROM students

Para retornar apenas campos específicos. Por padrão, o campo _id é retornado, a menos que especificado de outra forma no processo de projeção.
db.students.find({}, {name: 1, grade: 1, _id: 0})

Definir o _id:0 significa que apenas o documento retornado terá apenas o nome e os valores do objeto de nota.

Para selecionar linhas específicas com algum valor de coluna correspondente.
SELECT * FROM students WHERE grade = “A”

Para selecionar documentos específicos com algum valor de campo correspondente.
db.students.find({grade: “A”})

Selecionando linhas com uma coluna cujos valores possuem alguns caracteres como o valor do critério fornecido
SELECT * FROM students WHERE name like  “James%”

Selecionando documentos com um campo cujos valores tenham alguns caracteres como valor de critério fornecido
db.students.find({grade: {$regex: /^James/}})

Para retornar as linhas em ordem crescente usando a chave primária.
SELECT * FROM students ORDER BY id ASC

Para retornar os documentos em ordem crescente usando a chave primária
db.students.find().sort({$natural: 1})

Para agrupar as linhas retornadas de acordo com alguma coluna (nota)
SELECT DISTINCT (grade) FROM students

Agrupar documentos devolvidos de acordo com algum campo (nota)
db.students.aggregate([
{$group: : {_id: “$grade”}}
]

Limitando o número de linhas retornadas e pulando algumas
SELECT * FROM students LIMIT 1 SKIP 4

Limitando o número de documentos devolvidos e pulando linhas
db.students.find.limit(1).skip(4)

Uma opção essencial é saber como nossa consulta é executada, portanto, use o método Explain.
EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
Instrução SQL Update Declarações de atualização do MongoDB

Atualizar a coluna de notas para alunos com idade igual a 15 anos ou mais
UPDATE students SET grade  = “B” WHERE age >= 15

Aqui usamos alguns operadores como $gt, $lt e $lte.
db.students.updateMany({age: {$gte: 15}}, {$set: {status: “B”}})

Incrementando algum valor de coluna
UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
Instrução de exclusão SQL MongoDB remove instruções

Para excluir todas as linhas
DELETE FROM students

Para excluir todos os documentos.
db.students.remove({})

Para excluir uma linha específica onde alguma coluna tem um valor específico.
DELETE FROM students WHERE age = 15
db.students.remove({age: 15})

Esta tabela de mapeamento de amostra permitirá que você compreenda melhor o que aprenderemos em nosso próximo tópico.

SQL e Studio 3T


O Studio 3T é um dos programas disponíveis que ajuda a conectar SQL e MongoDB. Possui um recurso de consulta SQL para aprimorar um para manipular SQL. A consulta é interpretada no shell do Mongo para produzir um código de consulta simples no equivalente da linguagem MongoDB. Além de fazer consultas simples, o aplicativo Studio 3T agora pode fazer joins.

Para nossos dados de exemplo acima, depois de conectar seu banco de dados no Studio 3T, podemos usar a janela SQL para encontrar o documento que corresponde aos nossos critérios, ou seja:
SELECT * FROM students  WHERE name LIKE  'James%';

Se você tiver um documento com o campo de nome definido para o valor James, ele será retornado. Da mesma forma, se você clicar na guia de código de consulta, será apresentada uma janela com o código MongoDB equivalente. Para a afirmação acima, teremos:
db.getCollection("students").find(
    { 
        "name" : /^James.*$/i
    }
);

Resumo


Às vezes, você pode querer uma maneira rápida de interagir com o MongoDB a partir do conhecimento que tem sobre SQL. Aprendemos algumas semelhanças básicas de código entre o SQL e seu equivalente no MongoDB. Além disso, alguns programas, como o Studio 3T, possuem ferramentas bem estabelecidas para converter a consulta SQL em linguagem equivalente ao MongoDB e ajustar essa consulta para obter melhores resultados. Bem, para a maioria de nós, esta será uma ótima ferramenta para facilitar nosso trabalho e garantir que qualquer código que tenhamos no final seja muito ideal para o desempenho de nosso banco de dados. Na Parte 2 deste blog, vamos aprender sobre SQL INNER JOIN no MongoDB.