ACERCA DE: MONGODB. PARTE 2. CRUD DE OPERACIONES

< script src=”my own” title=”crud de operaciones” >

En el post anterior, se mostraron algunos comandos básicos de manejo en la shell; aquellos que tienen relación con la parte operacional de la shell de MongoDB en Javascript. En este post voy a mostrar algunos comandos relacionados con programación en MongoDB, es decir, lo que corresponde al CRUD de operaciones.

CRUD es el acrónimo de las cuatro operaciones básicas que debe permitir realizar todo sistema de almacenamiento respecto a la información que maneja:

  1. C por Create (crear y almacenar nueva información)
  2. R por Read (leer y obtener información almacenada)
  3. U por Update (modificar información almacenada)
  4. D por Delete (borrar información almacenada)

MongoDB por medio de su shell de comandos permite realizar todas estas operaciones, y unas cuantas más que poseen otra sintaxis en el mundo SQL. Pero antes de probar la sintaxis, hay que tomar en cuenta algunos puntos importantes:

  • Tanto las bases de datos como las colecciones que permite crear MongoDB, existen o se crean cuando se inserta el primer documento en la colección.
  • Una base de datos debe “usarse” primero para ser borrada (algo realmente extraño ❓ , considerando que en SQL esto se realiza con la sentencia DROP DATABASE <database>).
  • Por defecto, MongoDB se conecta a la base de datos “test”, pero este comportamiento puede ser modificado desde la shell o desde el archivo de configuración, no en caliente, aunque se puede cambiar la conexión una vez abierta la shell.

A continuación la ejecución de algunos comandos dentro de la shell (recuerda que abres la shell de MongoDB con el comando mongo) :mrgreen: :

> show collections
system.indexes
> db.test.insert({
... numberField: 42,
... stringField: "Clave con string",
... boolField: true,
... arrayField: ['valores', 'compuestos', false, 10],
... objectField: {n: 1, s: "String", b: true, a: [1, 2, 3]}
... });
WriteResult({ "nInserted" : 1 })
> db.test.update({numberField: 42}, {$set: {newField: "Campo nuevo"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find()
{ "_id" : ObjectId("562f9d5e0d9d0cd53245d0f2"), "numberField" : 42, "stringField" : "Clave con string", "boolField" : true, "arrayField" : [ "valores", "compuestos", false, 10 ], "objectField" : { "n" : 1, "s" : "String", "b" : true, "a" : [ 1, 2, 3 ] }, "newField" : "Campo nuevo" }
> db.test.find().pretty()
{
	"_id" : ObjectId("562f9d5e0d9d0cd53245d0f2"),
	"numberField" : 42,
	"stringField" : "Clave con string",
	"boolField" : true,
	"arrayField" : [
		"valores",
		"compuestos",
		false,
		10
	],
	"objectField" : {
		"n" : 1,
		"s" : "String",
		"b" : true,
		"a" : [
			1,
			2,
			3
		]
	},
	"newField" : "Campo nuevo"
}
> for ( var i = 0 ; i < 100 ; i++ ) { db.test.insert({"_id": i, "a": i, "b": "cadena "+i, "c": Math.random() > 0.5 ? true : false } ) }
WriteResult({ "nInserted" : 1 })
> db.test.count()
101
> db.test.find({"_id": 21})
{ "_id" : 21, "a" : 21, "b" : "cadena 21", "c" : true }
> db.test.remove({numberField: 42});
WriteResult({ "nRemoved" : 1 })
> db.test.count()
100
>
  • En la línea 1, se listan las colecciones disponibles en la base de datos usada (en este caso, usamos la base de datos por defecto: “test”). system.indexes es una colección que existe en todas las bases de datos una vez que tienen documentos insertados.
  • En la línea 3, insertamos un documento usando el método insert() dentro de una colección que no existe [aún]. Nótese que cuando dejo una sentencia incompleta, la shell de MongoDB me permite completarla o corregirla en la línea siguiente.
  • Los documentos se insertan con la sintaxis de Objetos JSON en todos los , y puedes combinar distintos valores según necesites. Igualmente para los parámetros de configuración, y todos los parámetros de las funciones de la shell de MongoDB.
  • En la línea 11, con el método update() podemos modificar UN documento que coincida con la selección (primer parámetro). Si no añadimos el operador $set, MongoDB hará reemplazo completo según lo que se indique en la modificación (segundo parámetro).
  • En la línea 12, podemos ver la respuesta de la shell de comandos, indicándonos la cantidad de documentos insertados, modificados, eliminados o seleccionados según corresponda con el comando ejecutado.
  • En la línea 13, con el método find() podemos listar todos los documentos existentes en la colección dentro de un límite razonable de 20 documentos por página, límite que es configurable. De excederse el límite, la shell de MongoDB habilita un cursor.
  • En la línea 14, la shell de comandos responde devolviendo los documentos que coincidan con el patrón de búsqueda empleado, en un formato que, dependiendo de la longitud del documento, puede llegar a ser incomprensible :/ .
  • En la línea 15, se resuelve el problema anterior, anexando el método pretty() al cursor que retorna la consulta, y puede evidenciarse que se lee en un formato más legible cuando necesitas por ejemplo, revisar la integridad de un documento.
  • En la línea 39, se evidencia que pueden ejecutarse sentencias Javascript básicas para insertar, modificar u obtener documentos. Son permitidos los bucles y condicionales asi como también la gran mayoría de “clases” de Javascript ES5.
  • En la línea 41, el método count() permite obtener el número de documentos almacenado en una colección. En el caso de SQL, sería algo como SELECT COUNT(*) FROM <table>;
  • En la línea 43, igual que en la línea 13, usa el método find(), pero esta vez con un parámetro que es el de consulta. MongoDB realiza siempre la coincidencia parcial de uno o más documentos.
  • En la línea 45, el método remove() elimina los documentos que tengan coincidencia exacta con la selección. Si se desea eliminar únicamente la primera coincidencia se debe especificar en la segunda opción, el número de documentos que deseas eliminar.

¡Uff, demasiada teoría! Pero que [espero sea] suficiente para los siguientes posts. 😉

</script>

Anuncios