Yet another mongoose migration tool
- Async/await is default concept
- Mongoose 4.11 support without deprecation warning
- Could be configured through command line arguments, environment variables or config file
- No dependencies, just one peer dependency - mongoose
- Typescript support
Install with npm:
$ npm install mongoomig
-
Create a migration. The following command creates a new migration file ./migrations/${date}-first-migration.js
$ mongoomig create first-migration
-
Write migration code
'use strict'; const User = require('../models/User'); module.exports = { async up() { await User.create({ name: 'test-user' }); }, async down() { await User.deleteOne({ name: 'test-user' }); }, };
-
Execute the migration
$ mongoomig up
-
(Optional) Add the migration command to package.json script:
"scripts": {
"start": "node index.js",
"migrate": "mongoomig up"
}
Also, you can check the example.
You can compile your modules before migration, or use ts-node instead:
npm install -D ts-node
mongomig up --require ts-node/register
Usage: mongoomig [options] <command>
Commands:
up [name] Migrate up till given migration
down [name] Migrate down till given migration
create <name> Create a new migration
list Show migrations which are applied
Options:
-c, --config=<path> Load config from json or js file, default to
./migrations/config.js
-u, --url=<url> Mongodb connection string
--collection=<name> Migrations collection, defaults to migrations
-p, --path=<path> Where your migrations are stored, defaults to
./migrations
--reconnectInterval=<ms> Try to reconnect every <ms>, default 300
--reconnectTries=<count> Try to reconnect <count> times, default 100
-r, --require=<module> Require a module before loading migrations
-s, --silent Silent mode, defaults to false
-d, --debug Debug mode, defaults to false
Also, you can set a such options through environment variable. Just set MONGOOMIG_<OPTION_NAME_UPPERCASED>. For example, the MONGOOMIG_COLLECTION environment variable is equal to the collection option.
Additionally, mongoomig tries to load the url option from the MONGO_URL environment variable if another ways are not available.
Another way is to specify options inside a config. By default, this package tries to read a config from migrations/config.js. Here is the example of such a config:
'use strict';
module.exports = {
url: 'mongodb://localhost/tiny-blog',
};
If you would like to run migrations from your code instead of command line, you can use API.
const Migration = require('mongoomig/lib/Migration');
const migration = new Migration({ path, url });
await migration.connect();
await migration.up();
A good example is index.js of this package.
Licensed under MIT.