Reputation: 1981
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
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
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