Clase MongoGridFS
(PECL mongo >=0.9.0)
Introducción
Utilidad para almacenar y extraer ficheros de la base de datos.
GridFS es una especificación de almacenamiento que implementan todos los drivers soportados. En resumen, define dos colecciones: files, para los metadatos del fichero, y chunks, para el contenido del fichero. Si el fichero fuera de gran tamaño, automáticamente se dividiría en porciones menores, y cada bloque se guardará como un documento en la colección de bloques.
Cada documento de la colección de ficheros contiene el nombre de fichero, fecha de subida, y un código hash md5. También contiene un campo único _id, que se puede utilizar para consultar el contenido del fichero en la colección de bloques. Cada documento de la colección de bloques contiene un bloque de datos binarios, un campo files_id que se corresponde con el _id de su fichero, y la posición de este bloque respecto a los demás.
Por ejemplo, el documento de ficheros podría ser algo tal que así:
<?php
array("_id" => 123456789, "filename" => "foo.txt", "chunkSize" => 3, "length" => 12);
?>
<?php
array("files_id" => 123456789, "n" => 0, "data" => new MongoBinData("abc"));
array("files_id" => 123456789, "n" => 1, "data" => new MongoBinData("def"));
array("files_id" => 123456789, "n" => 2, "data" => new MongoBinData("ghi"));
array("files_id" => 123456789, "n" => 3, "data" => new MongoBinData("jkl"));
?>
Compatibilidad Entre Lenguajes
Se puede usar cualquier fichero creado con MongoGridFS con cualquier otro driver y viceversa. Sin embargo, algunos drivers esperan que todos los metadatos asociados con un fichero se encuentren en el campo "metadata". Si se preve que se utilizará con otros lenguajes, es una buena idea empaquetar en un campo "metadata" toda la información que se desee que vean. Por ejemplo, en lugar de:
<?php
$grid->storeFile("algunfichero.txt", array("date" => new MongoDate()));
?>
utilice algo así:
<?php
$grid->storeFile("algunfichero.txt", array("metadata" => array("date" => new MongoDate())));
?>
La Familia MongoGridFS
MongoGridFS representa los ficheros y las colecciones de bloques. MongoGridFS hereda MongoCollection. Las instancias de MongoGridFS tienen acceso a todos los métodos de MongoCollection, que actúan sobre las colecciones de ficheros:
<?php
$grid = $db->getGridFS();
$grid->update(array("filename" => "foo"), $newObj); // actualización en la colección de ficheros
?>
Otro ejemplo de manipulación de metadatos:
<?php
// guardar un fichero
$id = $grid->storeFile("juego.tgz");
$juego = $grid->findOne();
// añadir un contador de descargas
$juego->file['descargas'] = 0;
$grid->save($juego->file);
// incrementar el contador
$grid->update(array("_id" => $id), array('$inc' => array("descargas" => 1)));
?>
Se puede también acceder a los bloques de una colección a partir de una instancia de MongoGridFS:
<?php
$chunks = $grid->chunks; // $chunks es un MongoCollection normal
$chunks->insert(array("x" => 4));
?>
Hay algunos métodos de MongoGridFS que comparten nombres con métodos de MongoCollection, pero que se comportan de un modo ligeramente diferente. Por ejemplo, MongoGridFS::remove() eliminará cualquier objeto, junto con su contenido en la colección de bloques, cuando se cumplan los criterios de la colección de ficheros.
Para almacenar cualquier otra cosa en GridFS, hay varias opciones. Si se tuviera un nombre de fichero, se podría hacer:
<?php
$grid->storeFile($filename, array("cualquier" => "metadato", "que" => "desee"));
?>
Si se tuviera un string de bytes que no fuera un fichero, se podrá tambien almacenar usando MongoGridFS::storeBytes():
<?php
$grid->storeBytes($bytes, array("cualquier" => "metadato", "que" => "desee"));
?>
Al consultar a una colección MongoGridFS, se devolverá un MongoGridFSCursor, que se comporta como un MongoCursor convencional, excepto que devuelve un MongoGridFSFiles en lugar de una matriz asociativa.
MongoGridFSFiles puede volver a escribirse en disco usando MongoGridFSFile::write(), o en memoria usando MongoGridFSFile::getBytes(). Actualmente no existe ningún método que cree automáticamente un flujo de bloques, pero resulta muy sencillo hacer escrituras realizando consultas a la colección $grid->chunks.
El objeto MongoGridFSFile contiene un campo file (fichero) que contiene cualquier metadato del fichero.
Sinopsis de la Clase
NULL
;NULL
;$bytes
[, array $metadata = array()
[, array $options = array()
]] )$filename
[, array $metadata = array()
[, array $options = array()
]] )Ver también
- Documentación del núcleo de MongoDB sobre » GridFS
- Entrada del blog de LightCube Solutions sobre » guardar subidas de usuario
- Entrada del blog de LightCube Solutions sobre » añadir metadatos a ficheros
Tabla de contenidos
- MongoGridFS::__construct — Crea una nueva colección de ficheros
- MongoGridFS::delete — Elimina un fichero y sus trozos de la base de datos
- MongoGridFS::drop — Da de baja una colección de ficheros y de bloques
- MongoGridFS::find — Selecciona ficheros
- MongoGridFS::findOne — Devuelve el fichero que cumpla las condiciones
- MongoGridFS::get — Obtiene un fichero de la base de datos
- MongoGridFS::put — Almacena un fichero en la base de datos
- MongoGridFS::remove — Eliminar ficheros y sus trozos de la base de datos
- MongoGridFS::storeBytes — Almacena un string de bytes en la base de datos
- MongoGridFS::storeFile — Almacena un fichero en la base de datos
- MongoGridFS::storeUpload — Almacena un fichero subido en la base de datos