mongo db (2): Operaciones básicas

Introducción a las operaciones CRUD con mongodb

Maria Szollosi

archivado en: JavaScript / 1 marzo, 2015 / taller:

En la entrada anterior de esta serie dedicada a mongo db vimos cómo instalar esta base de datos en local y preparamos un primer Hola mundo. En esta vamos con cosas más entretenidas, como las operaciones crud.

Como vimos, para crear una nueva base de datos en la que albergar nuestras colecciones, que son grupos de documentos, basta con ejecutar use Nombre de la base. Si no existe, se crea al vuelo. A partir de ahí, podemos utilizar los métodos del objeto db utilizando la notación de puntos característica de javaScript.

Cosas que molan: en cualquier momento podemos pedirle ayuda al shell de mongo ejecutando la instrucción help.

1. Insertar

Para insertar un documento en una colección podemos usar el método insert(), cuya sintaxis básica es:

db.nombre de la colección.insert(documento a insertar)

Por ejemplo:

/* Nos situamos en el directorio bin del directorio donde hemos instalado mongo */

marcos@ARRAKIS /c

$ cd c:/mongodb/bin

/* Ponemos en marcha mongo */

$ mongo

MongoDB shell version: 3.0.0-rc11

connecting to: test

> db

test

/* Creamos al vuelo la bbdd mitologia */

> use mitologia

switched to db mitologia

/* Podemos ver las bbdd creadas con el comando show */

> show dbs

mitologia 0.078GB

local 0.078GB

/* Preparamos un par de documentos */

> criaturaUno = {"nombre":"Medusa"}

> criaturaDos = {"nombre":"Minotauro"}

/* Los insertamos en la colección criaturas*/

> db.criaturas.insert(criaturaUno)

> db.criaturas.insert(criaturaDos)

/* Y aquí están... */

> db.criaturas.find()

{ "_id" : ObjectId("54f18f752fe4e9d6a79051d1"), "nombre" : "Medusa" }

{ "_id" : ObjectId("54f18f7e2fe4e9d6a79051d2"), "nombre" : "Minotauro" }

_id: Como vemos, al insertar un documento, mongo le asigna de forma automática un id único, que consiste en un número hexadecimal de 12 bytes formado a partir de la combinación del momento timestamp con una precisión de segundo, el id de la máquina donde se está ejecutando mongo, el id del proceso y, finalmente, tres bytes autoincrementales. El resultado es un id único que, además, podemos utilizar para listar los registros ordenados cronológicamente.

2. Leer

El comando básico para leer documentos (registros) es find(), que en inglés significa encontrar. Su sintaxis básica es:

db.nombre de la colección.find(<criterios de búsqueda>, <proyecciones>)

En el ejemplo anterior vimos como al ejecutar el comando find sin especificar ningún criterio de búsqueda, que es opcional, nos mostraba todos los documentos de la colección criaturas.

Ya veremos más adelante cómo definir criterios de búsqueda (query criteria) más sofisticados, pero de momento nos basta con saber que permiten acotar la búsqueda, tal y como hacemos con mysql con la cláusula WHERE.

Por ejemplo, así nos mostraría los registros de nuestra colección criaturas cuya propiedad nombre es Medusa.

db.criaturas.find({nombre:"Medusa"})

El segundo parámetro opcional que podemos definir en find es la proyección o resultado (proyection), esto es, la manera en que nos debe devolver los resultados.

Por ejemplo, al no haber especificado nada, en el caso anterior nos devuelve todos los documentos cuyo nombre es Medusa y nos muestra todos los pares de clave-valor que hay en cada documento, que en este caso es la clave _id y la clave nombre.

> db.criaturas.find({nombre:"Medusa"})

{ "_id" : ObjectId("54f18f752fe4e9d6a79051d1"), "nombre" : "Medusa" }

Pero estableciendo los valores booleanos 0 para indicar que no queremos tal clave o 1 para pedir que nos lo devuelva, podemos acotar el resultado, es decir, la proyección:

> db.criaturas.find({nombre:"Medusa"}, {_id:0, nombre:1})

{ "nombre" : "Medusa" }

3. Actualizar

Para actualizar un solo registro podemos usar el comando update, cuya sintaxis básica es:

db.nombre de la colección.update(criterio de selección, dato que updateamos)

Por ejemplo, vamos a ponerle su nombre verdadero al Minotauro:

> db.criaturas.update({"nombre":"Minotauro"}, {"nombre":"Asterion"})

/* La operación update retorna un objeto con información sobre el resultado de la operación */

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Tal y como hemos definido la sentencia, al updatear se reemplaza todo el documento. Así, por ejemplo, si tratáramos de añadir otra clave al documento Medusa:

> db.criaturas.update({"nombre":"Medusa"}, {"especie":"gorgonas"})

Se sobreescribiría por completo lo que hay:

> db.criaturas.find()
{ "_id" : ObjectId("54f18f752fe4e9d6a79051d1"), "especie" : "gorgonas" }

Para evitarlo e indicar qué campos, qué claves, son las que se deben cambiar o añadir hay que añadir el operador $set. Así, por ejemplo, recuperaríamos el nombre de nuestra simpática gorgona.

db.criaturas.update({"especie":"gorgonas"}, {

$set:{"nombre":"Medusa"}

})

{ "_id" : ObjectId("54f18f752fe4e9d6a79051d1"), "especie" : "gorgonas", "nombre": "Medusa" }

Hay más operadores, como $unset que permite borrar una clave o $rename para renombrarla, pero ya los veremos más adelante. De momento solo nos interesa conocer otros dos parámetros que podemos especificar en una operación update y son:

upsert, en el que podemos especificar un valor booleano (false por defecto), para indicar que, si no encuentra el documento indicado, inserte los datos como uno nuevo.

multi, que es false por defecto, que nos permite indicar si se debe cambiar solo la primera coincidencia o todas las encontradas.

Por último, mencionar que también disponemos del comando save() para updatear casos y que funciona de manera similar al update() sin $set, es decir, que sobreescribe documentos (menos la clave id).

4. Borrar

En esta introducción a las operaciones CRUD, sobre las que, insisto, volveré en detalle más adelante, ya solo nos falta saber cómo borrar documentos y esto se hace con el comando remove().

db.nombre de la colección.remove(criterio, <1>)

En el primer parámetro indicamos el filtro por el que se deben buscar los resultados y en el segundo, opcional, si el borrado debe realizarse solo sobre el primero encontrado. Así, por ejemplo, podríamos echar de nuestra colección criaturas a Asterión de la siguiente manera:

db.criaturas.remove({"nombre":"Asterion");

 

|| Tags: , ,

valoración de los lectores sobre mongo db (2): Operaciones básicas

  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • 5 sobre 5 (1 votos)

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

Los comentarios están cerrados.