Sie sind auf Seite 1von 24

MONGODB & PHP

Yoseph Arthur Espinoza león

Instituto de Sistemas Cusco


DESCRIPCIÓN GENERAL DE MONGODB

MongoDB es una solución escalable y de alto rendimiento, es una


base de datos de código abierto NoSQL, escrita en C++.
Sus características principales son:
• Orientada a documentos(almacenamiento BSON).
• arrays y documentos anidados
• Índices para realizar consultas mas rápidas
¿QUÉ ES UNA BASE DE DATOS NOSQL?

Las bases de datos NoSQL son sistemas de almacenamiento de


información que no cumplen con el esquema entidad-relación.
La principal característica de las bases de datos NoSQL es que están
pensadas para manipular enormes cantidades de información de
manera muy rápida. Están preparadas para escalar horizontalmente sin
perder rendimiento.
¿QUÉ ES MONGODB?

Orientada a documentos
¿QUÉ ES MONGODB?

Las colecciones son básicamente ¨bolsas de documentos¨, o bolsas


de objetos JSON

• Diferentes campos.
• Diferentes tamaños.
• Indexables (hace referencia a la acción de agregar una o
más páginas web a las bases de datos de los buscadores de
internet, para que estas aparezcan en los resultados de
búsquedas de los mismos).
INSTALACIÓN MONGODB

Descargar la versión desde:


http://www.mongodb.org/downloads
En Linux:
• creamos un directorio por defecto para los datos
$ sudo mkdir -p /data/db
• usamos cURL, para obtener la ultima versión:
$ curl -O http://downloads.mongodb.org/linux/mongodb-linux-i686-
latest.tgz
• desempaquetamos en el directorio deseado y listo.
$ tar xzf mongodb-linux-i686-latest.tgz
INSTALACIÓN MONGODB

• Instalar PHP Driver:


$ sudo apt-get install php5-dev php5-cli php-pear
$ sudo pecl install mongo

• Abrir el archivo php.ini y adicionar:


extension=mongo.so
ESTABLECIENDO UNA CONEXIÓN
<?php
//conecta a localhost:27017
$connection = new Mongo();
//conecta a un host remoto (puerto por omisión: 27017)
$connection = new Mongo( "example.com" );
// conecta a un host remoto en el puerto facilitado
$connection = new Mongo( example.com:65432" );
?>
Conexión persistente
<?php
$connection = new Mongo("localhost:27017", array("persist" => "x"));
?>
¿CÓMO GUARDAMOS UN DOCUMENTO?
<?php
try{
$mongo= new Mongo("localhost:27017", array("persist" => "x"));
$db = $mongo->comedy;
$collection = $db->cartoons;
$obj = array( " title " => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj); $obj = array( "title" => "XKCD", "online" => true );
$collection->insert($obj);
$cursor = $collection->find();
foreach ($cursor as $obj) {
echo $obj["title"] . "\n";
}
} catch (MongoCursorException $e) {
die("Query failed " . $e -> getMessage());
}
AL GUARDAR:

Cuando insertamos los documentos, sucede lo siguiente:


• La BD comedy es creada
• La colección cartoons es creada
• Se crea un índice en el campo _id
• Se crean y se adiciona un _id para cada documento
DOCUMENTOS MÁS COMPLEJOS

Representación en JSON : Representación en php :


{
'_id‘:'aristi', $doc = array ( '_id‘ => 'aristi',
'name‘:'Sebastian Aristizabal‘, 'name' => 'Sebastian Aristizabal',
'friends': ['Pablo', 'Yeny'], 'friends' => array ( 'Pablo‘ , 'Yeny' ),
'followers‘:18, 'followers‘ => 18,
'contact‘:{'twitter'=>'@arystyzabal', 'contact‘ => array ('twitter' => '@arystyzabal',
'email'=>'sebaris@gmail.com'} 'email‘ => 'sebaris@gmail.com‘
} )
);
ALGUNAS CONSULTAS BASICAS

• //Consulta básica
$query=array( '_id' => 'aristi' );
$result=$collection->findOne($query);

• //Consulta en array
$query=array( 'friends' => 'Pablo' );
$result=$collection->findOne($query);

• //Consulta en documento anidado


$query=array( 'contact.twitter' => '@arystyzabal' );
$result=$collection->findOne($query);
ESPECIFICANDO CAMPOS

Las consultas se pueden llevar a cabo especificando que campos


quiero retornar.

$query = array( '_id' => 'aristi' );


$fields = array( '_id‘ => 0, 'name‘ => 1, 'friends‘ => 1 );
$result = $collection -> findOne ( $query, $fields );
ALGUNAS CONSULTAS AVANZADAS

• mayor que ($gt), menor que ($lt), mayor o igual que ($gte), menor o
igual que ($lte)
$query = array ( 'friends' => array ( '$gt' => 10 ) );
$result = $collection->find( $query );

• IN ($in), no IN ($nin)

$query = array ( '_id' =>


array ( '$in' => array( 'aristi', 'ar' ) )
);
$result = $collection->find( $query );
ALGUNAS CONSULTAS AVANZADAS

• $or y $and
$query = array ( '$or' => array (
array ( '_id' => 'aristi'),
array ( 'name' => 'Roberto')
));
$result = $collection->find( $query );
• $ne
$query = array ( '_id' => array ( '$ne' => 'pepe'));
$result = $collection->find( $query );
• También soporta $exists. $mod, $type, $size
RESULTADOS DE LAS CONSULTAS

• El resultado de un find() es un cursor .


Los cursores se pueden manejar con foreach
$collection->insert( array ( 'x' => 1 ));
$collection->insert( array ( 'x' => 2 ));
$collection->insert( array ( 'x' => 3 ));
$results = $collection->find();
foreach ($results as $r) {
print_r($r);
}
RESULTADOS DE LAS CONSULTAS

• Los cursores se pueden trabajar con un ciclo while

$collection->insert( array ( 'x' => 1 ));


$collection->insert( array ( 'x' => 2 ));
$collection->insert( array ( 'x' => 3 ));

$results = $collection->find();
while ( $results->hasNext()) {
$r = $results->getNext();
print_r($r);
}
FUNCIONES BASICAS SOBRE CURSORES

• Los cursores se pueden contar, limitar, ordenar

$collection->insert( array ( 'x' => 1 ));


$collection->insert( array ( 'x' => 2 ));
$collection->insert( array ( 'x' => 3 ));
print($collection->find()->count()); //3
$res = $collection->find()->limit(1); // x=>1
$res2 = $collection->find()->skip(1)->limit(1); // x=>2
$res3 = $collection->find()->sort(array ( 'x' => 1 ));
ACTUALIZACIÓN DE DOCUMENTOS

• Consultas + comandos de actualización


//Tiene un comportamiento inesperado
$query = array( '_id' => 'aristi');
$update = array( 'followers' => '19' );
$collection->update( $query, $update);

//pero si se realiza así


$query = array( '_id' => 'aristi');
$update = array( '$set' => array('followers' => '19' ));
$collection->update( $query, $update);
ACTUALIZACIÓN DE DOCUMENTOS

• Otras operaciones

$query = array( '_id' => 'aristi');


$update = array(
'$set' => array('name' => 'Sebastian',
'contact.website' => 'http://sebas.com/'),
'$inc' => array( 'followers' => 1 ),
'$push' => array( 'friends' => 'Juan' ),
'$unset' => array( 'contact.twitter' => 1)
);
$collection->update( $query, $update);
CREAR REFERENCIAS ENTRE DOCUMENTOS DE
DIFERENTES COLECCIONES
$collection = $db->user;
$query = array( ‘name’ => ‘Sebastian’);
$user = $collection -> findOne ( $query);
$reference = $collection->createDBRef($user);
$collection = $db->activity;
$doc = array (
'_id' => new MongoId( '4f8c8e1371cbc84715000002 ' ),
'activeUser' => $reference,
'publishingDate' : '2012-04-16 16:24:35 ',
'activatingElement' : 'follow',
'privacyLevel' : 'public'
);
$collection->insert($doc);
CREAR REFERENCIAS ENTRE DOCUMENTOS DE
DIFERENTES COLECCIONES
$collection = $db->user;
$query = array( ‘name’ => ‘Sebastian’);
$user = $collection -> findOne ( $query);
$reference = $collection->createDBRef($user);
$collection = $db->activity;
$doc = array (
'_id' => new MongoId( '4f8c8e1371cbc84715000002 ' ),
'activeUser' => $reference,
'publishingDate' : '2012-04-16 16:24:35 ',
'activatingElement' : 'follow',
'privacyLevel' : 'public'
);
$collection->insert($doc);
CONSULTAR LOS DATOS DE UN DOCUMENTO
REFERENCIADO

$result = $collection->findOne(‘_id’ => new


MongoId(‘'4f8c8e1371cbc84715000002 ’);
$resultReference = $db->getDBRef($result[‘activeUser’])
BORRAR DOCUMENTOS

• Borrar toda la colección


$collection->remove();

• Borrar un documento de la colección


$query = array( ‘x’ => 1 );
$collection->remove( $query );
Borra donde x=1

Das könnte Ihnen auch gefallen