MongoDB GridFS

GridFS est utilisé pour stocker et récupérer des fichiers qui dépassent 16M (la limite des documents BSON), tels que des images, de l'audio, de la vidéo, etc.

GridFS est aussi un moyen de stockage de fichiers, mais il stocke les fichiers dans des collections MongoDB.

GridFS peut stocker plus efficacement des fichiers de plus de 16M.

GridFS divise les gros objets de fichiers en plusieurs petits morceaux (fragments de fichier), généralement de 256k chacun. Chaque morceau est stocké dans la collection chunks sous forme de document MongoDB.

GridFS utilise deux collections pour stocker un fichier : fs.files et fs.chunks.

Le contenu réel de chaque fichier est stocké dans des chunks (données binaires), et les métadonnées liées au fichier (filename, content_type et attributs définis par l'utilisateur) seront stockées dans la collection files.

Voici un exemple simple de document de la collection fs.files :

{
   "filename": "test.txt",
   "chunkSize": NumberInt(261120),
   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
   "md5": "7b762939321e146569b07f72c62cca4f",
   "length": NumberInt(646)
}

Voici un exemple simple de document de la collection fs.chunks :

{
   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
   "n": NumberInt(0),
   "data": "Mongo Binary Data"
}

Ajouter un fichier avec GridFS

Nous utilisons maintenant la commande put de GridFS pour stocker des fichiers mp3. Appelez l'outil mongofiles.exe dans le répertoire bin du répertoire d'installation de MongoDB.

Ouvrez l'invite de commandes, accédez au répertoire bin du répertoire d'installation de MongoDB, trouvez mongofiles.exe et saisissez le code suivant :

>mongofiles.exe -d gridfs put song.mp3

-d gridfsSpécifiez le nom de la base de données pour stocker le fichier. Si la base de données n'existe pas, MongoDB la créera automatiquement. Si la base de données n'existe pas, MongoDB la créera automatiquement. Song.mp3 est le nom du fichier audio.

Utilisez la commande suivante pour afficher les documents de fichiers dans la base de données :

>db.fs.files.find()

Après avoir exécuté la commande ci-dessus, les données de document suivantes sont renvoyées :

{
   _id: ObjectId('534a811bf8b4aa4d33fdf94d'), 
   filename: "song.mp3", 
   chunkSize: 261120, 
   uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
   length: 10401959 
}

Nous pouvons voir tous les chunks dans la collection fs.chunks. Ci-dessous, nous obtenons la valeur _id du fichier. Nous pouvons utiliser ce _id pour obtenir les données du chunk :

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

Dans l'exemple ci-dessus, la requête a renvoyé des données de 40 documents, ce qui signifie que le fichier mp3 est stocké en 40 chunks.

Autres extensions