MongoDB - GridFS

GridFSest la spécification MongoDB pour stocker et récupérer des fichiers volumineux tels que des images, des fichiers audio, des fichiers vidéo, etc. C'est une sorte de système de fichiers pour stocker des fichiers mais ses données sont stockées dans des collections MongoDB. GridFS a la capacité de stocker des fichiers encore plus grands que sa limite de taille de document de 16 Mo.

GridFS divise un fichier en blocs et stocke chaque bloc de données dans un document séparé, chacun d'une taille maximale de 255 Ko.

GridFS utilise par défaut deux collections fs.files et fs.chunkspour stocker les métadonnées du fichier et les blocs. Chaque bloc est identifié par son champ ObjectId _id unique. Le fs.files sert de document parent. lefiles_id Le champ dans le document fs.chunks lie le bloc à son parent.

Voici un exemple 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)
}

Le document spécifie le nom du fichier, la taille du bloc, la date de téléchargement et la longueur.

Voici un exemple de document du document fs.chunks -

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

Ajout de fichiers à GridFS

Maintenant, nous allons stocker un fichier mp3 en utilisant GridFS en utilisant le putcommander. Pour cela, nous utiliserons lemongofiles.exe utilitaire présent dans le dossier bin du dossier d'installation de MongoDB.

Ouvrez votre invite de commande, accédez à mongofiles.exe dans le dossier bin du dossier d'installation de MongoDB et tapez le code suivant -

>mongofiles.exe -d gridfs put song.mp3

Ici, gridfsest le nom de la base de données dans laquelle le fichier sera stocké. Si la base de données n'est pas présente, MongoDB créera automatiquement un nouveau document à la volée. Song.mp3 est le nom du fichier téléchargé. Pour voir le document du fichier dans la base de données, vous pouvez utiliser la requête de recherche -

>db.fs.files.find()

La commande ci-dessus a renvoyé le document suivant -

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

Nous pouvons également voir tous les morceaux présents dans la collection fs.chunks liés au fichier stocké avec le code suivant, en utilisant l'ID de document retourné dans la requête précédente -

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

Dans mon cas, la requête a renvoyé 40 documents, ce qui signifie que l'ensemble du document mp3 a été divisé en 40 morceaux de données.