MongoDB es una base de datos de documentos que ofrece una gran escalabilidad y flexibilidad y un modelo de consultas e indexación avanzado basado en NoSQL.
No existen las BBDD como tal, sino que existen tablas (collections) que guardan documentos (JSON Binario)
La instalación de MongoDB es muy sencilla y en este caso la realizaremos en un sistema Raspbian, basado en en una Raspberry.
apt update
apt upgrade
apt-get install -y mongodb
Habilitaremos el servicio y arrancaremos la BBDD
systemctl enable mongodb
systemctl start mongodb
Nos conectaremos a la BBDD por primera vez:
root@node01:~# mongo
MongoDB shell version: 2.4.14
En este punto, le configuraremos una primera password inicial de administración para el usuario “admin”
use admin;
db.addUser( { user: "admin",
pwd: "123456",
roles: [ "userAdminAnyDatabase", "admin" ]
} )
Ahora, vamos a ver un sistema CRUD; el acrónimo de Create (Crear), Read (Leer), Update (Actualizar) y Delete (Borrar), básico para su administración.
Create y Read
El concepto creación en MongoDB no existe ya que está basado en collections. Es decir, si no hay datos dentro de una BBDD (a diferencia de MySQL/MariaDB/…) esta no se mostrará ni se creará.
Para poder listar las collections, usaremos el comando:
show dbs
Ahora, vamos a usar ( use xxxx ) una collection y le añadiremos datos ( db.user.insert ):
> use guif
switched to db guif
> db.user.insert({name: "uno", number: 1})
> db.user.insert({name: "dos", number: 2})
> db.user.insert({name: "tres", number: 3})
> db.user.insert({name: "cuatro", number: 4})
En este punto, podremos ver la BBDD creada ( show dbs ) y los datos insertados ( db.user.find() ):
> show dbs
admin 0.0625GB
guif 0.0625GB
local 0.03125GB
test (empty)
> db.user.find()
{ "_id" : ObjectId("661991ee4fb5cb96992b2e99"), "name" : "uno", "number" : 1 }
{ "_id" : ObjectId("661994606a5049b9bba4f692"), "name" : "dos", "number" : 2 }
{ "_id" : ObjectId("661994606a5049b9bba4f693"), "name" : "tres", "number" : 3 }
{ "_id" : ObjectId("661994606a5049b9bba4f694"), "name" : "cuatro", "number" : "4" }
Read
Para buscar datos ( db.user.find ), deberemos conocer la colección y la ubicación del dato. En este caso, realizaremos lo sigiuiente:
> use guif
switched to db guif
> db.getCollectionNames()
[ "system.indexes", "user" ]
> db.user.find( { "name": "tres" } )
{ "_id" : ObjectId("661994606a5049b9bba4f693"), "name" : "tres", "number" : 3 }
Esta búsqueda, equivale a realizar:
SELECT * FROM user WHERE name = "tres";
Update
Para actualizar ( db.user.update ) datos, usaremos la siguiente nomenclatura teniendo en cuenta que ya conocemos el dato ( ObjectId: 661994606a5049b9bba4f694 ) previamente.
> db.user.find()
{ "_id" : ObjectId("661991ee4fb5cb96992b2e99"), "name" : "uno", "number" : 1 }
{ "_id" : ObjectId("661994606a5049b9bba4f692"), "name" : "dos", "number" : 2 }
{ "_id" : ObjectId("661994606a5049b9bba4f693"), "name" : "tres", "number" : 3 }
{ "_id" : ObjectId("661994606a5049b9bba4f694"), "name" : "cuatro", "number" : "4" }
> db.user.update(
{"_id" : ObjectId("661994606a5049b9bba4f694")},
{
"$set": {
"number":"5"
}
})
> db.user.find()
{ "_id" : ObjectId("661991ee4fb5cb96992b2e99"), "name" : "uno", "number" : 1 }
{ "_id" : ObjectId("661994606a5049b9bba4f692"), "name" : "dos", "number" : 2 }
{ "_id" : ObjectId("661994606a5049b9bba4f693"), "name" : "tres", "number" : 3 }
{ "_id" : ObjectId("661994606a5049b9bba4f694"), "name" : "cuatro", "number" : "5" }
Como se observa, el ObjectId 661994606a5049b9bba4f694 ha modificado el campo number a 5 cuando antes era 4.
Delete
Para eliminar( db.user.remove ) datos, usaremos la siguiente nomenclatura teniendo en cuenta que ya conocemos el dato ( ObjectId: 661994606a5049b9bba4f694 ) previamente.
> db.user.remove({ "_id": ObjectId("661994606a5049b9bba4f694") })
> db.user.find()
{ "_id" : ObjectId("661991ee4fb5cb96992b2e99"), "name" : "uno", "number" : 1 }
{ "_id" : ObjectId("661994606a5049b9bba4f692"), "name" : "dos", "number" : 2 }
{ "_id" : ObjectId("661994606a5049b9bba4f693"), "name" : "tres", "number" : 3 }
{ "_id" : ObjectId("661994606a5049b9bba4f694"), "name" : "cuatro", "number" : "4" }
> db.user.find()
{ "_id" : ObjectId("661991ee4fb5cb96992b2e99"), "name" : "uno", "number" : 1 }
{ "_id" : ObjectId("661994606a5049b9bba4f692"), "name" : "dos", "number" : 2 }
{ "_id" : ObjectId("661994606a5049b9bba4f693"), "name" : "tres", "number" : 3 }
Si queremos eliminar mas de uno, tendremos que crear una función:
> db.user.remove({
"_id": {
$in: [
ObjectId("661994606a5049b9bba4f693"),
ObjectId("661994606a5049b9bba4f692")
]
}
})
> db.user.find()
{ "_id" : ObjectId("661991ee4fb5cb96992b2e99"), "name" : "uno", "number" : 1 }