MongoDB

RDlab@lsi.upc.edu
Febrero 2014

català Bienvenidos a LSI.

Introducción

A continuación se mostrará cómo establecer la conexión con el servidor de MongoDB. Se mostrará cómo acceder en modo texto, por línea de comandos, y se proporcionarán ejemplos de conexión al servicio para los lenguajes JAVA i PHP.

Datos de acceso al servicio

Nombre del servidor: mongodb-rdlab.lsi.upc.edu
Puerto: 27017

El usuario (en adelante, <username>) y la contraseña (<password>) ) se pueden obtener vía web en http://rdlab.lsi.upc.edu/index.php/es/servicios/peticionacceso.html o mediante correo electrónico a rdlab@lsi.upc.edu.

NOTA: El nombre de la base de datos será el mismo que username.

Conexión en modo texto

Para conectarse en modo texto (terminal o línea de comandos) en sistemas Unix ejecutaremos el comando:

mongo mongodb-rdlab.lsi.upc.edu

De este modo se establece conexión con el servidor, pero todavía falta autenticarse contra la base de datos:

use <base_de_datos>
db.auth(“<username>”,”<password>”)

Con el comando “show collections;” comprobaremos que podemos listar los contenidos de nuestra base de datos:

show collections

Ejemplo de conexión desde php

Previamente al establecimiento de la conexión, es necesario preparar el sistema e instalar la librería mongoDB de PHP

  1. Instalar en el sistema el gestor de módulos de PHP (PEAR), las librerías de desarrollo de PHP y la librería libpcre3-dev

    sudo apt-get install php-pear php5-dev libpcre3-dev

    Este paso es necesario para poder instalar posteriormente las librerías de MongoDB para PHP.
    Es posible que apt-get instale librerías adicionales. Esto no supone ningún problema.

  2. Instalar MongoDB para PHP con el gestor de paquetes de PEAR:

    sudo pecl install mongodb

    Si el proceso finaliza correctamente, éste le indicará el siguiente paso:

    You should add "extension=mongodb.so" to php.ini

  3. Abrir el archivo php.ini y editarlo. Por defecto suele haber uno para la línea de comandos (CLI) y otro para Apache, en los siguientes PATH
  4. /etc/php5/apache2/php.ini
    /etc/php5/cli/php.ini

Si queremos establecer una conexión desde un entorno PHP, lo haremos mediante el siguiente código:

$host = "mongodb-rdlab.lsi.upc.edu";
$username = "<username>";
$password = "<password>";
$database = "<database>";

$manager = new MongoDB\Driver\Manager("mongodb://$username:$password@$host:27017/$database");

$query = new MongoDB\Driver\Query(array(), array());
$rows = $manager->executeQuery("$database.system.users", $query);
foreach($rows as $r){
    print_r($r);
}

Si todo va bien, ejecutando el script verá una salida como la siguiente:

stdClass Object
(
     [_id] => MongoDB\BSON\ObjectID Object
     (
        [oid] => orh9qufhsdkfakfiasfhkjff
     )
     [user] => <username>
     [readOnly] =>
     [pwd] => 9847ifhif9238rf923ry9fisdhf938yr
)

Ejemplo de conexión desde java

Para realizar la conexión desde un proyecto java, se requiere la descarga del driver mongo-java-driver-2.10.1.jar, añadirlo al CLASSPATH de nuestro proyecto e importarlo con las sentencias:

import com.mongodb.MongoClient;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.ServerAddress;

Una vez hecho esto, ejecutaremos el siguiente código:

String server = "mongodb-rdlab.lsi.upc.edu";
String username = "<username>";
String password = "<password>";
String database = "<database>";

MongoClient mongoClient = new MongoClient(server);
DB db = mongoClient.getDB(database);
boolean auth = db.authenticate(username,password.toCharArray());

Para saber si funcionará correctamente, se puede probar a listar nuestras colecciones:

Set<String> colls = db.getCollectionNames();
for (String s : colls) {
    System.out.println(s);
}

Enlaces de interés

  1. mongoDB manual:
    http://docs.mongodb.org/manual/
  2. mongoDB desde PHP:
    https://secure.php.net/manual/es/set.mongodb.php
  3. MySQL desde Java:
    http://docs.mongodb.org/ecosystem/drivers/java