Giter Site home page Giter Site logo

node-migrate-mongo's Introduction

node-migrate-mongo

Migrations for MongoDB

build status npm version mit license we're hiring

node-migrate-mongo enables data migrations in your existing project. The state of your migrations is stored in the database specified in the mongo property of your Migratefile.coffee. By default, this collection is called migration_versions. See the Usage section (and let's be honest: the code) for more information.

Despite the name, this module does not borrow from TJ's node-migrate, though it follows very similar conventions.

Usage

In your existing project where you'd like to have migrations:

npm install --save node-migrate-mongo
cat << EOF- > Migratefile.coffee
  module.exports =
    mongo: 'mongodb://localhost/your_db'
EOF
migrate generate --name my_first_migration
# edit it
migrate all

Migratefile

JavaScript variants

Your Migratefile file can be any JavaScript variant recognized by interpret. Just make sure to use the right file extension. For CoffeeScript, use the .coffee extension. For Babel, use the .babel.js extension.

Options

  • beforeTest -- An async function called before running a migration test. By default sets NODE_ENV=test.
  • before -- An async function called before running a command. Useful for connecting your app to its database.
  • after -- An async function called after running a command.
  • afterTest -- An async function called after running a migration test.
  • mongo.url -- (required) A MongoDB connection string.
  • mongo.options -- An options object passed to the MongoDB client connection.
  • model -- A reference to your custom MigrationVersion model.
  • path -- The place to store your migration files. Defaults to migrations.
  • ext -- The extension for your migration files. Defaults to coffee.
  • template -- The template used when generating migrations.
  • context -- Values provided as part of this within all migration functions (up, down, and test)
  • transform -- A function that allows you to transform migrations before they are run.

before/after callbacks are called in this order: [ beforeTest, before, after, afterTest ]

Migrations that take promises

One way to accomplish this is with a Migratefile that looks like this, which will allow you to define migrations with upPromise, downPromise, and testPromise functions:

var Promise = require 'bluebird';

module.exports = {
  transform: function(migration) {
    ['up', 'down', 'test'].forEach(function(fn) {
      var promiseVersion = migration[fn + "Promise"];
      if (promiseVersion) {
        migration[fn] = function(done) {
          return Promise.resolve(promiseVersion()).nodeify(done);
        };
      }
    });
    return migration;
  }
}

Contributing

Please follow our Code of Conduct when contributing to this project.

$ git clone https://github.com/goodeggs/node-migrate-mongo && cd node-migrate-mongo
$ npm install
$ npm test

Module scaffold generated by generator-goodeggs-npm.

node-migrate-mongo's People

Contributors

bobzoller avatar demands avatar goodeggs-mk avatar goodeggs-terraformer avatar serhalp avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

node-migrate-mongo's Issues

liftoff 2x / v8flags 2x released

Heya, this is just a friendly note to let you know that a new version of Liftoff and some of the dependencies commonly used in conjunction with it have been released. This release adds better support for situations where your user's configuration files are written using features behind a v8 flag (e.g. --harmony). Windows users and io.js users should see less issues if you upgrade!

Some helpful links:
https://github.com/tkellen/node-liftoff/blob/master/UPGRADING.md#100---200
https://github.com/tkellen/node-v8flags/blob/master/README.md#example
https://github.com/tkellen/node-hacker/blob/master/bin/hacker.js#L10-L14

Thanks!

default to javascript

currently extensions and template default to coffee-script -- seems more community-friendly to default to javascript.

record attempted migrations?

Currently, we record migrations in the versions table after they run successfully. For migrations that fail, this means they're re-attempted on every run until they succeed. For idempotent migrations, this is fine. For those that aren't, it can cause serious issues.

One potential solution is to record migrations as started or attempted, and warn but not retry them on subsequent runs. Another version is to exit uncleanly when we hit a previously attempted migration, forcing the developer to resolve before proceeding.

Feedback / thoughts welcome.

/cc @hurrymaplelad @goodeggs/delivery-eng

print usage

should print usage if no/invalid command is provided

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.