Consultas MongoDb

En esta ocasión un pequeño recopilatorio sobre comandos básicos de MongoDb:

Las consultas se realizan con el comando find()

db.foo.find(query, projection)

query indica cual es el criterio a buscar.

projection  indica que campos hace falta, son campos que se pueden incluir o excluir.

db.foo.find({_id:1}, {_id:1})

El 1 indica que ese campo se incluye, un 0 no incluiría ese, hay una excepción y es el campo _id que siempre se incluye a no ser que se excluya de forma explícita, no se puede combinar o se incluyen todos o se excluyen todos (todos 1s o todo 0s).

A continuación una tabla tipo con los criterios de búsqueda más utilizados:

{$gt} Mayor que db.foo.find({_id: {$gt:5}},{_id:1})
{$lt} Menor que db.foo.find({_id: {$lt:5}},{_id:1})
{$lte} Menor que o igual db.foo.find({_id: {$lte:5}},{_id:1})
{$gte} Mayor que o igual db.foo.find({_id: {$gte:5}},{_id:1})
{$not} Negar la premisa db.foo.find({_id: {$not: {$gt:2}}}, {_id:1})
{$in} Valores en rango db.foo.find({_id: {$in: [1,3]}},{_id:1})
{$nin} Valores no en rango db.foo.find({_id: {$nin: [1,3]}},{_id:1})
{$all} Deben coincidir todos los valores db.foo.find({tags: {$all: [‘cute’,’ocean’]}}, {name:1})
{$exists} Verifica si el campo existe o no (true, false) db.foo.find({“info.canFly”: {$exists:false}},{name:1})

Se pueden concatenar filtros, aquí se estaría indicando todos los que sean mayores que uno y menores que 4 (2 y 3).

db.foo.find({_id: {$gte:2,$lt:4}},{_id:1})

Para buscar por texto hay que tener en cuenta que el texto es sensible a mayúsculas y minúsculas, tanto el nombre del campo como el valor.

db.foo.find({tags: ‘cute’}, {name:1})

 Para indicar un nulo se haría:

db.foo.find({“info.canFly”:null},{name:1})

 Esto devuelve tanto campos nulos como campos que no existen.

Consultas MongoDb

Instalando MongoDB

Las bases de datos NoSQL están cogiendo cada vez más popularidad, MongoDB posiblemente sea la que más atención acapare ahora mismo, mucha gente se centra en su capacidad de almacenar y procesar gran cantidad de información pero de cara al desarrollo su interés radica en su cómodo acoplamiento con el código.

En desarrollo se llama impedancia a esa separación que existe entre las bases de datos y el código, las BBDDs tradicionales funcionan con tablas mientras que el código si es POO funciona a través de clases, esta impedancia se ha intentado resolver con varias soluciones (Active Record, ORM,..) aunque en el desarrollo resulta evidente que siguen surgiendo diferencias entre un sistema y otro.

En el caso de MongoDB (y posiblemente otras) esta diferencia queda mitigada, el simple hecho de que tus objetos se puedan guardar “tal cual”, si además a esto le sumamos un mantenimiento fácil que simplifica la parte de IT es normal que haya calado entre la comunidad de desarrolladores

En este caso voy a dar unas breves notas de cómo se instala y un poco de configuración básica sobre MongoDB, hay que tener en cuenta que MongoDB se puede programar usando un lenguaje javascript lo cual facilita mucho las cosas, al final veremos un ejemplo.

Una vez descargada la aplicación está se instalará por defecto en C:\Program Files\MongoDB, por defecto la ruta de los datos se almacena en \data\db.

La aplicación se lanza con el ejecutable mongod, una vez abierta se puede cerrar con Ctrl+C.

Es posible indicar un archivo de configuración, por ejemplo:

#where data files will reside

dbpath=G:\MongoDB\Data

#where the log file will be stored

logpath=G:\MongoDB\Log\mongo-server.log

#how verbose the server will be logging

verbose=vvvvv

 Esto indica que los datos se guardarán en la ruta G:\MongoDB\Data, el log se guardará en la ruta G:\MongoDB\Log\mongo-server.log el nivel de detalle se especifica en verbose.

Para poder instalar como un servicio se ejecutaría la siguiente línea apuntando al archivo de configuración.

mongod –f “c:\Program Files\MongoDB\Server\3.0\bin\mongod.conf” –install

Para poder lanzar la línea de comandos del cliente hay que usar el ejecutable mongo.

 Algunos comandos básicos son:

show dbs Muestra las bases de datos que existen
db Muestra la base de datos actual
Use nombre_de_base_de_datos Cambia a la base de datos indicada
help Muestra la ayuda
db.getMongo() Devuelve los datos de la conexión

Se pueden lanzar comandos administrativos sin invocar la Shell de comandos, por ejemplo para poder lanzar comandos de administración:

mongo server1/admin –eval “db.runCommand({logRotate:1})”

En este caso la opción eval evaluará el comando entre comillas y lo ejecutará sin entrar en Shell (en el ejemplo se rota el archivo de log para archivarlo).

Si son muchos comandos entonces se puede lanzar un archivo que contenga todos los comandos:

mongo server1 myDailyChores.js 

Existe la opción de ejecutar una secuencia de comandos y después ingresar en la Shell para seguir introduciendo órdenes, en este caso introduciendo –shell al final:

mongo server1 myDailyChores.js –shell

Podemos introducir la cadena de conexión y la base de datos directamente donde ejecutar el comando.

mongo localhost/admin –eval “db.runCommand({logRotate:1})” 

La salida de este comando no es muy descriptiva, si queremos ver la información que emite la consola podemos hacer:

mongo localhost/admin –eval “printjson(db.runCommand({logRotate:1}))”

Unos accesos rápido y útiles en la shell desde teclado:

Ctrl+K  Borra desde el cursor hasta el final de línea

Ctrl+L  Limpiar pantalla

Se puede usar un editor externo para la edición de javascript asociado a MongoDB, para ello se establece la variable de entorno EDITOR.

C:\>set EDITOR = “notepad++.exe”

Después desde el Shell de mongo haríamos:

mongo> myFunction = function(x) {}

mongo> edit myFunction

Para cargar desde la Shell un archivo primero usaríamos pwd() para saber la ruta actual y después para cargar el archivo safer.js que contiene el código haríamos load(‘safer.js’).

Se puede ejecutar un fichero siempre que se entra en la shell de mongo para esto se crea un fichero con nombre mongorc.js y se coloca dentro de la ruta de usuario c:\users\{username}\.mongorc.js

Si se quiere evitar la carga de este fichero inicial se puede usar el parámetro –norc

Finalmente un script útil para evitar borrar base de datos o apagar el servidor:

var _no_ = function() { print(“Nope!”);}

db.prototype.dropDatabase = _no_;

db.dropDatabase = db.prototype.dropDatabase;

db.prototype.shutdownServer = _no_;

db.shutdownServer = db.prototype.shutdownServer;

Otra forma sería:

db.prototype.dropDatabase = function() {

            print(“No”);

}

db.dropDatabase=db.prototype.dropDatabase;

 

 

Instalando MongoDB