
Product
Announcing Precomputed Reachability Analysis in Socket
Socket’s precomputed reachability slashes false positives by flagging up to 80% of vulnerabilities as irrelevant, with no setup and instant results.
migrate-mongo
Advanced tools
The migrate-mongo npm package is a tool for managing MongoDB database migrations. It allows developers to create, run, and manage database schema changes in a controlled and versioned manner.
Create a new migration
This feature allows you to create a new migration file. The migration file will be created in the configured migrations directory with a timestamp in its filename.
const migrateMongo = require('migrate-mongo');
migrateMongo.create('my-new-migration').then(() => {
console.log('Migration created');
});
Run migrations
This feature runs all pending migrations. It ensures that your database schema is up-to-date with the latest changes.
const migrateMongo = require('migrate-mongo');
migrateMongo.up().then((migrated) => {
console.log('Migrations up:', migrated);
});
Rollback migrations
This feature rolls back the last applied migration. It is useful for undoing changes in case of errors or issues.
const migrateMongo = require('migrate-mongo');
migrateMongo.down().then((migrated) => {
console.log('Migrations down:', migrated);
});
Configure migrate-mongo
This feature allows you to configure the connection to your MongoDB database and other settings like the migrations directory and changelog collection name.
const migrateMongo = require('migrate-mongo');
const config = {
mongodb: {
url: 'mongodb://localhost:27017/mydatabase',
databaseName: 'mydatabase',
options: {
useNewUrlParser: true,
useUnifiedTopology: true
}
},
migrationsDir: 'migrations',
changelogCollectionName: 'changelog'
};
migrateMongo.config.set(config);
The mongodb-migrations package provides similar functionality for managing MongoDB migrations. It allows you to define and run migrations, but it is less feature-rich and has a simpler API compared to migrate-mongo.
The migrate package is a general-purpose migration tool that can be used with various databases, including MongoDB. It offers a flexible API and supports custom migration templates, but it requires more setup and configuration compared to migrate-mongo.
Umzug is a migration framework for Node.js that supports various storage backends, including MongoDB. It is highly customizable and integrates well with Sequelize, but it may require additional setup for MongoDB-specific use cases compared to migrate-mongo.
A database migration tool for MongoDB in Node.
$ npm install -g migrate-mongo
$ migrate-mongo
Usage: migrate-mongo [options] [command]
Commands:
init initialize a new migration project
create [description] create a new database migration with the provided description
up [options] run all unapplied database migrations
down [options] undo the last applied database migration
status [options] print the changelog of the database
Options:
-h, --help output usage information
-V, --version output the version number
Create a directory where you want to store your migrations for your mongo database (eg. 'albums' here) and cd into it
$ mkdir albums-migrations
$ cd albums-migrations
Initialize a new migrate-mongo project
$ migrate-mongo init
Initialization successful. Please edit the generated config.js file
The above command did two things:
Edit the config.js file. Make sure you change the mongodb url:
'use strict';
// In this file you can configure migrate-mongo
module.exports = {
mongodb: {
// TODO Change (or review) the url to your MongoDB:
url: 'mongodb://localhost:27017',
// TODO Change this to your database name:
databaseName: "YOURDATABASENAME",
// uncomment and edit to specify Mongo client connect options (eg. increase the timeouts)
// see https://mongodb.github.io/node-mongodb-native/2.2/api/MongoClient.html
//
// options: {
// connectTimeoutMS: 3600000, // 1 hour
// socketTimeoutMS: 3600000, // 1 hour
// }
},
// The migrations dir, can be an relative or absolute path. Only edit this when really necessary.
migrationsDir: 'migrations',
// The mongodb collection where the applied changes are stored. Only edit this when really necessary.
changelogCollectionName: 'changelog',
};
To create a new database migration script, just run the migrate-mongo create [description]
command.
For example:
$ migrate-mongo create blacklist_the_beatles
Created: migrations/20160608155948-blacklist_the_beatles.js
A new migration file is created in the 'migrations' directory:
'use strict';
module.exports = {
up(db, next) {
// TODO write your migration here
next();
},
down(db, next) {
// TODO write the statements to rollback your migration (if possible)
next();
}
};
Edit this content so it actually performs changes to your database. Don't forget to write the down part as well.
The db
object contains the official MongoDB db object
An example:
'use strict';
module.exports = {
up(db, next) {
db.collection('albums').update({artist: 'The Beatles'}, {$set: {blacklisted: true}}, next);
},
down(db, next) {
db.collection('albums').update({artist: 'The Beatles'}, {$set: {blacklisted: false}}, next);
}
};
The up/down implementation can use either callback-style or return a Promise.
'use strict';
module.exports = {
up(db) {
return db.collection('albums').update({artist: 'The Beatles'}, {$set: {blacklisted: true}});
},
down(db) {
return db.collection('albums').update({artist: 'The Beatles'}, {$set: {blacklisted: false}});
}
};
Make sure the implementation matches the function signature.
function up(db) { /* */ }
should return Promise
function up(db, next) { /* */ }
should callback next
At any time, you can check which migrations are applied (or not)
$ migrate-mongo status
┌─────────────────────────────────────────┬────────────┐
│ Filename │ Applied At │
├─────────────────────────────────────────┼────────────┤
│ 20160608155948-blacklist_the_beatles.js │ PENDING │
└─────────────────────────────────────────┴────────────┘
This command will apply all pending migrations
$ migrate-mongo up
MIGRATED UP: 20160608155948-blacklist_the_beatles.js
If an an error occurred, it will stop and won't continue with the rest of the pending migrations
If we check the status again, we can see the last migration was successfully applied:
$ migrate-mongo status
┌─────────────────────────────────────────┬──────────────────────────┐
│ Filename │ Applied At │
├─────────────────────────────────────────┼──────────────────────────┤
│ 20160608155948-blacklist_the_beatles.js │ 2016-06-08T20:13:30.415Z │
└─────────────────────────────────────────┴──────────────────────────┘
With this command, migrate-mongo will revert (only) the last applied migration
$ migrate-mongo down
MIGRATED DOWN: 20160608155948-blacklist_the_beatles.js
If we check the status again, we see that the reverted migration is pending again:
$ migrate-mongo status
┌─────────────────────────────────────────┬────────────┐
│ Filename │ Applied At │
├─────────────────────────────────────────┼────────────┤
│ 20160608155948-blacklist_the_beatles.js │ PENDING │
└─────────────────────────────────────────┴────────────┘
All actions (except init
) accept an optional -f
or --file
option to specify a path to a custom config file.
By default, migrate-mongo will look for a config.js
config file in of the current directory.
$ migrate-mongo status -f '~/configs/albums-migrations.js'
┌─────────────────────────────────────────┬────────────┐
│ Filename │ Applied At │
├─────────────────────────────────────────┼────────────┤
│ 20160608155948-blacklist_the_beatles.js │ PENDING │
└─────────────────────────────────────────┴────────────┘
FAQs
A database migration tool for MongoDB in Node
The npm package migrate-mongo receives a total of 135,650 weekly downloads. As such, migrate-mongo popularity was classified as popular.
We found that migrate-mongo demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket’s precomputed reachability slashes false positives by flagging up to 80% of vulnerabilities as irrelevant, with no setup and instant results.
Product
Socket is launching experimental protection for Chrome extensions, scanning for malware and risky permissions to prevent silent supply chain attacks.
Product
Add secure dependency scanning to Claude Desktop with Socket MCP, a one-click extension that keeps your coding conversations safe from malicious packages.