sql >> Base de Datos >  >> NoSQL >> MongoDB

Vinculación y creación de uniones MongoDB usando SQL:Parte 1

SQL es la forma preferida de interactuar con bases de datos relacionales en lo que respecta a las consultas. Se entiende que los usuarios habrían trabajado con bases de datos relacionales como MySQL y PostgreSQL que emplean la función de consulta SQL. En general, SQL es fácil de entender y, por lo tanto, se volvió ampliamente utilizado, especialmente en bases de datos relacionales.

Sin embargo, SQL es bastante complejo cuando se trata de incluir un amplio conjunto de documentos en una base de datos. En pocas palabras, no está destinado a bases de datos de documentos, ya que presenta una serie de contratiempos. Por ejemplo, no puede consultar documentos de matriz incrustados con facilidad o, más bien, deberá diseñar un subprograma para iterar y filtrar los datos devueltos para obtener los resultados requeridos. En consecuencia, esto resultará en un incremento de la duración de la ejecución. Pero tener una buena comprensión de SQL proporcionará una mejor base para interactuar con MongoDB desde algún punto en lugar de comenzar desde cero.

En este blog, usaremos el programa Studio 3T para mostrar las diversas consultas de unión de SQL y cómo puede rediseñarlas en consultas de MongoDB para lograr un mejor rendimiento. El programa se puede descargar desde este enlace.

Conectando SQL a MongoDB

Hay varios controladores o más bien interfaces a través de los cuales puede usar SQL para comunicarse con MongoDB, por ejemplo, ODBC. ODBC significa Conectividad abierta de bases de datos. Esta es simplemente una interfaz que permite que las aplicaciones accedan a los datos en los sistemas de administración de bases de datos utilizando SQL como el proceso estándar para acceder a esos datos. Viene con una ventaja adicional de interoperabilidad mediante la cual una sola aplicación puede acceder a múltiples sistemas de administración de bases de datos.

En este blog, produciremos y probaremos código de SQL y luego lo optimizaremos a través de un editor de agregación para producir una consulta MongoDB.

Gráfico de asignación de SQL a MongoDB

Antes de entrar en muchos detalles, debemos comprender las relaciones básicas entre estas 2 bases de datos, especialmente las palabras clave en el concepto de consulta.

Terminología y Conceptos

SQL MongoDB
Tabla
Fila
Columna
Uniones de tabla
Colección
Documento BSON
Campo
$búsqueda

La clave principal en SQL define una columna única que básicamente organiza las filas en orden de tiempo récord. Por otro lado, la clave principal en MongoDB es un campo único para contener un documento y garantizar que los campos indexados no almacenen valores duplicados.

Varios nueves Conviértase en un administrador de bases de datos de MongoDB - Llevando MongoDB a la producción Obtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar MongoDBDescargar gratis

Correlación entre SQL y MongoDB

Digamos que tenemos datos de un estudiante y queremos registrar estos datos tanto en la base de datos SQL como en MongoDB. Podemos definir un objeto estudiante simple como:

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

Al crear una tabla SQL, debemos definir los nombres de las columnas y el tipo de datos, mientras que en MongoDB se creará automáticamente una colección durante la primera inserción.

La siguiente tabla nos ayudará a comprender cómo se pueden escribir algunas de las declaraciones SQL en MongoDB.

instrucción de esquema SQL Declaraciones de esquema de MongoDB
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

Para insertar un documento en la base de datos

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

Podemos definir un diseño de esquema utilizando algunos módulos como mangosta y definir los campos como un objeto en lugar de insertar un documento directamente para mostrar la correlación. La identificación de archivo principal se generará automáticamente durante la inserción de un documento.

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

Insertando un nuevo documento para crear la colección

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

Usando la instrucción ADD para agregar una nueva columna a la tabla existente.

ALTER TABLE students ADD units 10

La estructura de los documentos de la colección no está bien definida y, por lo tanto, actualice los documentos a nivel de documento utilizando updateMany()

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

Para soltar una columna (unidades)

ALTER TABLE students DROP COLUMN units

Para soltar un campo (unidades)

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

Para dejar una mesa estudiantes

DROP TABLE students

Para dejar estudiantes de colección

db.students.drop()
instrucción SQL Select Declaraciones de búsqueda de MongoDB

Seleccionar todas las filas

SELECT * FROM students

Seleccionar todos los documentos

db.students.find()

Para devolver solo columnas específicas.

SELECT name, grade FROM students

Para devolver solo campos específicos. De forma predeterminada, se devuelve el campo _id a menos que se especifique lo contrario en el proceso de proyección.

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

Establecer el _id:0 significa que solo el documento devuelto tendrá el nombre y los valores del objeto de calificación únicamente.

Para seleccionar filas específicas con algún valor de columna coincidente.

SELECT * FROM students WHERE grade = “A”

Para seleccionar documentos específicos con algún valor de campo coincidente.

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

Selección de filas con una columna cuyos valores tienen algunos caracteres como el valor de criterio proporcionado

SELECT * FROM students WHERE name like  “James%”

Selección de documentos con un campo cuyos valores tienen algunos caracteres como el valor de criterio suministrado

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

Para devolver las filas en orden ascendente utilizando la clave principal.

SELECT * FROM students ORDER BY id ASC

Para devolver los documentos en forma ascendente usando la clave principal

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

Para agrupar filas devueltas de acuerdo a alguna columna (grado)

SELECT DISTINCT (grade) FROM students

Para agrupar documentos devueltos de acuerdo a algún campo (grado)

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

Limitar el número de filas devueltas y omitir algunas

SELECT * FROM students LIMIT 1 SKIP 4

Limitar el número de documentos devueltos y omitir filas

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

Una opción esencial es saber cómo se ejecuta nuestra consulta, por lo tanto, use el método de explicación.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
Instrucción de actualización de SQL Declaraciones de actualización de MongoDB

Actualice la columna de calificación para los estudiantes cuya edad sea igual o mayor a 15 años

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

Aquí usamos algunos operadores como $gt, $lt y $lte.

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

Incrementando algún valor de columna

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
Declaración de eliminación de SQL MongoDB eliminar declaraciones

Para eliminar todas las filas

DELETE FROM students

Para eliminar todos los documentos.

db.students.remove({})

Para eliminar una fila específica donde alguna columna tiene un valor específico.

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

Esta tabla de mapeo de muestra le permitirá comprender mejor lo que vamos a aprender en nuestro próximo tema.

SQL y Studio 3T

Studio 3T es uno de los programas disponibles que ayuda a conectar SQL y MongoDB. Tiene una función de consulta SQL para mejorar una para manipular SQL. La consulta se interpreta en el shell de Mongo para producir un código de consulta simple en el equivalente del lenguaje MongoDB. Además de realizar consultas simples, la aplicación Studio 3T ahora puede realizar uniones.

Para nuestros datos de muestra anteriores, después de conectar su base de datos en Studio 3T, podemos usar la ventana SQL para encontrar el documento que coincida con nuestros criterios, es decir:

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

Si tiene un documento con el campo de nombre establecido en el valor de James, se devolverá. Asimismo, si hace clic en la pestaña de código de consulta, se le presentará una ventana con el código MongoDB equivalente. Para la afirmación anterior, tendremos:

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

Resumen

A veces, es posible que desee una forma rápida de interactuar con MongoDB a partir del conocimiento que tiene sobre SQL. Hemos aprendido algunas similitudes básicas de código entre SQL y su equivalente en MongoDB. Además, algunos programas como Studio 3T tienen herramientas bien establecidas para convertir la consulta SQL al lenguaje equivalente de MongoDB y ajustar esta consulta para obtener mejores resultados. Bueno, para la mayoría de nosotros, esta será una gran herramienta para facilitar nuestro trabajo y garantizar que cualquier código que tengamos al final sea óptimo para el rendimiento de nuestra base de datos. En la Parte 2 de este blog, aprenderemos sobre SQL INNER JOIN en MongoDB.