3

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

1

2 Answers 2

4

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
 }
});
Sign up to request clarification or add additional context in comments.

1 Comment

@Rob-I'll give this a try and will update soon.Thanks alot for your suggestion
2

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.

4 Comments

fs will read the contents of the file but my requirement is to store the entire file say name.txt as it is into my mongodb. Do you have any idea?
@AmandaG You can't store a file, as is, in a database. That's what a filesystem is for. You'd instead, store the contents of the file in the database.
@AmandaG You can have a simple collection: files that have a filename and contents key that would "replicate" the same effect as having it within a filesystem (sorta)
:I stored the file contents into a variable and saved the variable into the mongodb ie data but when i tried retrieving i got the following output requestParam: '[object Object]' i did not get the data i stored.Any idea regarding this will be really helpful

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.