Mongodb es una base de datos NoSQL orientada a documentos.
- Forma de almacenar datos de forma estructurada
- Permite consultar los datos
Las bases de datos relacionales son tradicionalmente usadas en el mundo de los datos consistentes y estructurados. Se definen modelos, relaciones, y entidades, y a partir de ellos se crean tablas.
- MySQL
- MariaDB
- PostgreSQL
Las bases de datos NoSQL se diferencian de las SQL por el lenguaje de consulta. No todas las NoSQL son iguales, ni te ofrecen las mismas opciones
- MongoDB (documentos)
- Cassandra (tablas flexibles + claves compuestas)
- Datastore (clave-valor + tablas clave-valor)
- Redis (clave-valor + mapas)
Se define una clave única para toda la base de datos, y esa clave almacena un valor.
Imaginemos que queremos relacionar DNIs y Nombres:
-
Clave: 51511530B
-
Valor: Carlos ...
-
Clave: 52561430Y
-
Valor: Paco
-
Redis
-
Datastore
-
~ firebase
Son típicas estructuras de tabla, pero con la opción de añadir o eliminar columnas sin definirlo en el esquema. Te da una flexibilidad mayor a la hora de trabajar con los datos.
- Cassandra
- DynamoDB
Puede haber documentos con la misma clave principal, y se utiliza para realizar querys, ya que sólo se puede consultar por la clave principal.
- Cassandra
Almacenan un documento de texto plano. Normalmente piden que tenga cierta estructura, y normalmente esa estructura será un JSON. No requieren que definas nada. A menudo ofrecen búsquedas de texto, y gestión de campos.
- Firebase
- MongoDB
- Wikipedia Una base de datos tiene que elegir dos de las tres opciones.
Las SQL son consistentes, y dependiendo de si necesias disponibilidad o tolerancia a particiones, elegirás una u otra. Las no relacionales son fuertes en disponibilidad.
Mongo es una base de datos muy potente y flexible. Desde MySQL la transición es bastante suave, y como primera base de datos para jugar también da mucho juego. Pero, ojo, también es una base de datos traicionera en algunos casos.
- Fácil de usar
- Muchas querys disponibles, muuuuy flexible
- No te preocupas por cómo se guardan los datos
- No te preocupas (de primeras) por los índices
- Tiene tendencia a borrar o corromper los datos --> Haz backups!
- No soporta muchísimas conexiones a la vez --> Vas a tener que replicarla
- Gestionar múltiples instancias es complicado --> Si vas a crecer, empieza a pensar en sharding (repartir los datos)
- Los servidores en producción son omplicados de manejar --> Busca a un buen sysadmin que te ayude
Buena pregunta. Todas las bases de datos tienen sus puntos buenos, y sus puntos malos. Sin duda. Mongo te ofrece muchísima flexibilidad, y a cambio te pide que estés muy pendiente de darle amor a la base de datos.
La principal diferencia que vas encontrar con, por ejemplo, MySQL es que Mongo te va a pedir amorcito durante todo el ciclo de vida de tu app, pero vas a poder cambiarlo todo de arriba a abajo de un día para otro, y MySQL va a pedirte muuuucho amor y compromiso con tus modelos el día uno, y luego no va a volver a molestarte más.
npm install mongodb --save
const MongoClient = require('mongodb').MongoClient;
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'myproject';
// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
console.log("Connected successfully to server");
// Preparamos la base de datos
const db = client.db(dbName);
// Cerramos la conexión
client.close();
});
-
Insert
-
insertOne
-
insertMany
const collection = db.collection('documents');
// Insert some documents
collection.insert({a : 1}, function(err, result) {
console.log(result);
console.log("Inserted documents into the collection");
callback(result);
});
-
find
-
findAndModify
-
findAndRemove
-
findOne
-
findOneAndDelete
-
findOneAndReplace
-
findOneAndUpdate
collection.find({}).toArray(function(err, docs) {
console.log("Found the following records");
console.log(docs)
});
collection.find({'a': 1}).toArray(...);
collection.updateOne({ a : 2 },
{ $set: { b : 1 } },
function(err, result) {
console.log("Updated the document with the field a equal to 2");
callback(result);
});
collection.deleteOne({ a : 3 }, function(err, result) {
console.log("Removed the document with the field a equal to 3");
callback(result);
});