Created
July 1, 2011 05:24
-
-
Save lsm/1057920 to your computer and use it in GitHub Desktop.
Exporter/importer to fix crapped gridfs files for node-mongodb-native < 0.9.4.4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var mongodbSrc = require('./mongodb-0.9.4-3'); | |
var mongodbDst = require('./mongodb-0.9.6-1'); | |
/**** Edit start ****/ | |
var SRC_HOST = '10.0.0.31'; | |
var SRC_PORT = 27017; | |
var SRC_DB_NAME = 'mydb'; | |
var SRC_ROOT_COLLECTION = 'images'; | |
var FILE_QUERY = {}; // default to all | |
var DST_HOST = '127.0.0.1'; | |
var DST_PORT = 27017; | |
var DST_DB_NAME = 'myotherdb'; | |
var DST_ROOT_COLLECTION = 'images'; | |
/**** Edit end ****/ | |
var serverSrc = new mongodbSrc.Server(SRC_HOST, SRC_PORT); | |
var dbSrc = new mongodbSrc.Db(SRC_DB_NAME, serverSrc, {native_parser: false}); | |
var GridStoreSrc = mongodbSrc.GridStore; | |
var serverDst = new mongodbDst.Server(DST_HOST, DST_PORT); | |
var dbDst = new mongodbDst.Db(DST_DB_NAME, serverDst, {native_parser: false}); | |
var GridStoreDst = mongodbDst.GridStore; | |
var msg = ['You files will be pumped \nfrom\n%s:%s/%s.%s \nto\n%s:%s/%s.%s\n']; | |
msg = msg.concat(SRC_HOST, SRC_PORT, SRC_DB_NAME, SRC_ROOT_COLLECTION); | |
msg = msg.concat(DST_HOST, DST_PORT, DST_DB_NAME, DST_ROOT_COLLECTION); | |
console.log.apply(console, msg); | |
function saveToDst(file, content, callback) { | |
function write(err, db) { | |
if (err) throw err; | |
var options = {root: DST_ROOT_COLLECTION, 'content_type': file.contentType}; | |
options.metadata = file.metadata; | |
options.chunk_size = file.chunkSize; | |
var gsDst = new GridStoreDst(db, file.filename, 'w', options); | |
gsDst.open(function(err, gsDst) { | |
if (err) throw err; | |
gsDst.write(content, true, function(err, gsDst) { | |
if (err) throw err; | |
callback(db); | |
}); | |
}); | |
} | |
dbDst.state === 'connected' ? write(null, dbDst) : dbDst.open(write); | |
} | |
dbSrc.open(function(err, db) { | |
if (err) throw err; | |
db.collection(SRC_ROOT_COLLECTION + '.files', function(err, collSrc) { | |
if (err) throw err; | |
collSrc.find(FILE_QUERY, null, {}, function(err, cursorSrc) { | |
cursorSrc.toArray(function(err, files) { | |
if (err) throw err; | |
console.log('Found %s files', files.length); | |
var count = 0; | |
function copy(fileSrc) { | |
if (!fileSrc) { | |
db.close(); | |
return; | |
} | |
console.log('\nReading file `%s` from source...', fileSrc.filename); | |
var gsSrc = new GridStoreSrc(db, fileSrc.filename, 'r', {root: SRC_ROOT_COLLECTION}); | |
gsSrc.open(function(err, gsSrc) { | |
if (err) throw err; | |
gsSrc.read(function(err, contentSrc) { | |
if (err) throw err; | |
console.log('length: %s\nWriting to destination...', contentSrc.length); | |
saveToDst(fileSrc, contentSrc, function(dbDst) { | |
console.log('finished writing `%s`', fileSrc.filename); | |
count++; | |
var nextFile = files.pop(); | |
if (nextFile) { | |
copy(nextFile); | |
} else { | |
console.log('\nAll finished, %s files transfered', count); | |
db.close(); | |
dbDst.close(); | |
} | |
}); | |
}) | |
}); | |
} | |
copy(files.pop()); | |
}); | |
}); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment