'use strict'; var LevelStorage = require('../lib/storage_leveldb'); var MongoStorage = require('../lib/storage'); var Bitcore = require('bitcore-lib'); var level = new LevelStorage({ dbPath: './db', }); var mongo = new MongoStorage(); mongo.connect({ mongoDb: { uri: 'mongodb://localhost:27017/bws', } }, function(err) { if (err) throw err; run(function(err) { if (err) throw err; console.log('All data successfully migrated'); process.exit(0); // mongo._dump(function() { // process.exit(0); // }); }); }); function run(cb) { var pending = 0, ended = false; level.db.readStream() .on('data', function(data) { pending++; migrate(data.key, data.value, function(err) { if (err) throw err; pending--; if (pending == 0 && ended) { return cb(); } }); }) .on('error', function(err) { return cb(err); }) .on('end', function() { console.log('All old data read') ended = true; if (!pending) { return cb(); } }); }; function migrate(key, value, cb) { if (key.match(/^copayer!/)) { value.copayerId = key.substring(key.indexOf('!') + 1); mongo.db.collection('copayers_lookup').insert(value, cb); } else if (key.match(/!addr!/)) { value.walletId = key.substring(2, key.indexOf('!addr')); value.network = Bitcore.Address(value.address).toObject().network; mongo.db.collection('addresses').insert(value, cb); } else if (key.match(/!not!/)) { mongo.db.collection('notifications').insert(value, cb); } else if (key.match(/!p?txp!/)) { value.isPending = key.indexOf('!ptxp!') != -1; value.network = Bitcore.Address(value.toAddress).toObject().network; mongo.db.collection('txs').insert(value, cb); } else if (key.match(/!main$/)) { mongo.db.collection('wallets').insert(value, cb); } else { return cb(new Error('Invalid key ' + key)); } };