Skip to content

jorasmhj/db-mongo-migration

Repository files navigation

Db-Mongo-Migration

Coverage Status NPM Downloads Known Vulnerabilities

BuyMeACoffee

A command-line tool for running and managing MongoDB migrations.

Installation

To install Db-Mongo-Migration, run the following command:

npm i db-mongo-migration

CLI Usage

  __  __                               __  __ _                 _
 |  \/  | ___  _ __   __ _  ___       |  \/  (_) __ _ _ __ __ _| |_ ___
 | |\/| |/ _ \| '_ \ / _` |/ _ \ _____| |\/| | |/ _` | '__/ _` | __/ _ \
 | |  | | (_) | | | | (_| | (_) |_____| |  | | | (_| | | | (_| | ||  __/
 |_|  |_|\___/|_| |_|\__, |\___/      |_|  |_|_|\__, |_|  \__,_|\__\___|
                     |___/                      |___/
Usage: mongo-migration [options] [command]

Options:
  -V, --version   output the version number
  -h, --help      display help for command

Commands:
  init            Initialize migration config
  create [name]   Create a migration
  status          Get migration status
  up [options]    Run migration
  down [options]  Rollback migrations
  help [command]  display help for command

Basic Usage

Initialize Migration Config

To initialize the migration config, run the following command:

npx mongo-migrate init

This will create a migration-config.yaml file in the current directory.

db-connection:
  url: ${URL}
  databaseName: ${DATABASE_NAME}
  options:
    useNewUrlParser: true
    useUnifiedTopology: true

migrationsDir: migrations
changelogCollectionName: migrations
projectName: YOUR-PROJECT-NAME
useDefaultTransaction: true

You can use .env to auto populate the environment variables

Create a Migration

To create a new migration, run the following command:

npx mongo-migrate create [name]

Replace [name] with the name of your migration. This will create a new migration file in the migrations directory.

Options

  • -n, -native: Create migration file for native Mongo DB operation (WIP).

Without option -n, it will create a file with following content:

Without option -n With native support (-n) - WIP
  import { IMigration, DB } from "db-mongo-migration"

  class Migration implements IMigration {
    /**
    * Run the migrations.
    */
    async up(db: DB) {
      // YOUR CODE HERE
    }

    /**
    * Reverse the migrations.
    */
    async down(db: DB) {
      // YOUR CODE HERE
    }
  }

  export default Migration;
import { INativeMigration, DbSessionHelper, MongoClient } from "db-mongo-migration"
import { Db } from 'mongodb';

class NativeMigration implements INativeMigration {
  /**
   * Run the migrations.
   */
  async up(db: Db, client: MongoClient) {
    return await handleDbTransaction(client, async session => {
        // YOUR CODE HERE
      });
  }

  /**
   * Reverse the migrations.
   */
  async down(db: Db, client: MongoClient) {
    // YOUR CODE HERE
  }
}

export default NativeMigration;
-> System handles the entire Transaction Session -> Should pass client.globalSession to give system the control to handle the transaction session

Get Migration Status

To get the status of your migrations, run the following command:

npx mongo-migrate status

This will display a table showing the status of each migration.

Run Migrations

To run your migrations, run the following command:

npx mongo-migrate up

This will run all pending migrations.

Options

  • -f, -file <filename>: Run migration for a specific file.
  • -d, --dry-run: Run migration with a dry run.

Rollback Migrations

To rollback your migrations, run the following command:

npx mongo-migrate down

This will rollback the last batch of migrations.

Options

  • -f, -file <filename>: Run rollback for a specific file.
  • -r, -reset: Reset the migration.
  • -d, --dry-run: Run migration rollback with a dry run.
  • -b, --batch <number>: Number of batch to rollback.
  • -s, --steps <number>: Number of steps to rollback.

License

This project is licensed under the MIT License - see the LICENSE file for details.