使用node.js运行数据库迁移(mongodb)

我正在寻找一个节点模块来进行mongo数据库迁移。 到目前为止,我发现了mongo-migrate ,但是还不够强大。 (比没有好,但我需要更多,我习惯于使用Ruby的迁移,这真的很强大!)

我几个星期前发现了另外一个,function强大但是不处理mongoDb,只能用MySQL,PostGre等等。

你知道一个模块或什么可以帮助我吗? 我的意思是,我不是第一个想要处理数据库迁移的人,你怎么处理这个问题? 我的项目会很大,我需要控制。

这里是我迄今为止所做的一个例子:

* 0010-init_category_table.js *

 var mongodb = require('mongodb'); exports.up = function(db, next){ var documentName = 'category'; var collection = mongodb.Collection(db, documentName); var index; var indexOptions; /** * Create indexes. */ index = { "code": 1 }; indexOptions = { unique: true }; collection.ensureIndex( index, {unique: true, w: 1}, function(error, data){ console.log(error ? error : documentName + ': [ensureIndex] ' + JSON.stringify(index) + JSON.stringify(indexOptions)); }); index = { "name": 1 }; indexOptions = { unique: true }; collection.ensureIndex( index, {unique: true, w: 1}, function(error, data){ console.log(error ? error : documentName + ': [ensureIndex] ' + JSON.stringify(index) + JSON.stringify(indexOptions)); }); /** * Create basic data. */ collection.insert({ code: 'a', name: 'languageStatus' }, {w: 1}, function(error, data){ console.log(error ? error : documentName + ': [insert] ' + JSON.stringify(data)); }); collection.insert({ code: 'b', name: 'accessName' }, {w: 1}, function(error, data){ console.log(error ? error : documentName + ': [insert] ' + JSON.stringify(data)); }); collection.insert({ code: 'c', name: 'roleName' }, {w: 1}, function(error, data){ console.log(error ? error : documentName + ': [insert] ' + JSON.stringify(data)); }); collection.insert({ code: 'd', name: 'translationStatus' }, {w: 1}, function(error, data){ console.log(error ? error : documentName + ': [insert] ' + JSON.stringify(data)); }); /** * Display index information. */ collection.indexInformation(function(error, data){ console.log(error ? error : documentName + ': [indexes] ' + JSON.stringify(data)); }); next(); }; exports.down = function(db, next){ var documentName = 'category'; var document = mongodb.Collection(db, documentName); var query = { $or: [ {name: 'languageStatus'}, {name: 'accessName'}, {name: 'roleName'}, {name: 'translationStatus'} ] }; document.find(query, function(error, data){ data.each(function(error, data){ document.remove(data, {w: 1}, function(error, number){ console.log(error ? error : documentName + ': [remove] (' + number + ') ' + JSON.stringify(data)); }) }); }); next(); }; 

我刚刚开发了这个: https : //github.com/eberhara/mongration – 你也可以在npm上find。

我们需要一个好的mongodb节点迁移框架,但找不到任何 – 所以我们build立一个。

它具有比正规迁移框架更好的function:

  • 校验和(在先前运行的迁移与旧版本不匹配时发出错误)
  • 坚持移民国家mongo(没有正式的国家档案)
  • 全面支持副本集
  • 自动句柄回滚(开发者必须指定回滚程序)
  • 能够同时运行多个迁移(同步或asynchronous)
  • 能够同时运行针对不同数据库的迁移