MongoDB

RDlab@lsi.upc.edu
Febrer 2014

català Benvinguts a LSI.

Introducció

A continuació es mostrarà com establir la connexió amb el servidor de MongoDB. Es mostrarà com accedir en mode text, per línia de comandes, i es proporcionaran exemples de connexió al servei per als llenguatges JAVA i PHP.

Dades d’accés al servei

Nom del servidor: mongodb-rdlab.lsi.upc.edu
Port: 27017

L'usuari (en endavant, <username>) i la contrasenya (<password>) els pots demanar via web a http://rdlab.lsi.upc.edu/index.php/ca/serveis/solicitaracces.html o mitjançant un correu electrònic rdlab@lsi.upc.edu.

NOTA: El nom de la base de dades serà el mateix nom que username.

Connexió en mode text

Per a connectar-nos en mode text (terminal o línia de comandes) en sistemes Unix executarem la comanda:

mongo mongodb-rdlab.lsi.upc.edu

Amb això establirem la connexió amb el servidor, però encara falta autenticar-se contra la base de dades:

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

Amb la comanda “show collections;” comprovarem que podem llistar els continguts de la nostra base de dades:

show collections

Exemple de connexió des de php

Prèviament l'establiment de la connexió, és necessari preparar el sistema i instal·lar la llibreria mongoDB de PHP

  1. Instal·lar al sistema el gestor de mòduls de PHP (PEAR), les llibreres de desenvolupament de PHP y la libreria libpcre3-dev

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

    Aquest pas és necessari per a poder instal·lar posteriorment les llibreries de mongoDB per a PHP.
    És possible que apt-get instal·li llibreries addicionals. Això no suposa cap inconvenient.

  2. Instal·lar MongoDB per a PHP amb el gestor de paquets de PEAR:

    sudo pecl install mongodb

    Si el procés finaliza correctament, aquest indicará el següent pas:

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

  3. Obrir el fitxer php.ini y editar-lo. Per defecte sol haver-hi un per la línea de comandes (CLI) i un altre per Apache, als següents PATH
  4. /etc/php5/apache2/php.ini
    /etc/php5/cli/php.ini

Si volem establir una connexió des d’un entorn PHP, ho podem fer mitjançant el següent codi:

$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 tot va bé, executant l'script veurem una sortida como la següent:

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

Exemple de connexió des de java

Per a realitzar la connexió des d’un projecte java, cal descarregar el driver mongo-java-driver-2.10.1.jar, afegir-lo al CLASSPATH del nostre projecte i importar-lo amb les sentencies:

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;

Un cop fet això, executarem el següent codi:

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());

Per saber si funcionarà correctament, podem provar a llistar les nostres col·leccions:

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

Enllaços d’interès

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