Amanda G
Amanda G

Reputation: 1981

Storing a file in mongodb using node.js

Hi i need to store a file in mongodb using node.js, the file is placed in my desktop i will have to store it in my mongodb database.I came across something called gridfs but am not sure how to proceed further.Any help will be much appreciated

Upvotes: 3

Views: 15248

Answers (2)

Rob Squires
Rob Squires

Reputation: 2188

If your file size exceeds 16Mb, Mongo's maximum document size, you must use gridFS if you wish to store the files in your DB.

There's a very useful run down of the reasons to use gridFS here: http://docs.mongodb.org/manual/faq/developers/#faq-developers-when-to-use-gridfs

In terms of implementation in node (if using the nativ mongo driver):

var  mongodb = require('mongodb')
   , MongoClient = mongodb.MongoClient
   , Grid = mongodb.Grid //use Grid via the native mongodb driver
   ;

Once you've setup you connection, when it comes to writing the file into gridFs

var grid = new Grid(db, 'fs'); //db being a handle to your database

var buffer = //read the file in to a buffer

//write the buffer out to mongo
grid.put(buffer, {metadata:{category:'text'}, content_type: 'text'}, function(err, fileInfo) {
 if(err) {
   //handle any errors here
 }
});

Upvotes: 4

Daniel
Daniel

Reputation: 1692

While I don't recommend storing big files in Mongo, though it's possible, smaller files would be better.

Simply read the file's text (if it's a text file), or binary (if it's in a binary format i.e executable). You can use the fs library to read the file and encode it accordingly.

Then insert the data, stored in a variable, inside the database.

var fs = require('fs');

// Read file with proper encoding...
var data = //...

// Insert into Mongo
mongo.insert({file: data});

When you want to retrieve the file from the database, you'd do the opposite. The process of encoding/decoding is different depending on the type of file.

Upvotes: 2

Related Questions