Version: v1.3.2 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: May 9, 2017 License: MIT Imports: 9 Imported by: 0


MongoDB Driver

  • Runs pre-registered Golang methods that receive a single *mgo.Session parameter and return error on failure.
  • Stores migration version details in collection db_migrations. This collection will be auto-generated.
  • Migrations do not run in transactions, there are no built-in transactions in MongoDB. That means that if a migration fails, it will not be rolled back.
  • There is no out-of-the-box support for command-line interface via terminal.

Usage in Go

import ""

// Import your migration methods package so that they are registered and available for the MongoDB driver.
// There is no need to import the MongoDB driver explicitly, as it should already be imported by your migration methods package.
import _ "my_mongo_db_migrator"

// use synchronous versions of migration functions ...
allErrors, ok := migrate.UpSync("mongodb://host:port", "./path")
if !ok {
  fmt.Println("Oh no ...")
  // do sth with allErrors slice

// use the asynchronous version of migration functions ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "mongodb://host:port", "./path")
// pipe is basically just a channel
// write your own channel listener. see writePipe() in main.go as an example.

Migration files format

The migration files should have an ".mgo" extension and contain a list of registered methods names.

Migration methods should satisfy the following:

  • They should be exported (their name should start with a capital letter)
  • Their type should be func (*mgo.Session) error

Recommended (but not required) naming conventions for migration methods:

  • Prefix with V : for example V001 for version 1.
  • Suffix with "_up" or "_down" for up and down migrations correspondingly.





Methods registration

For a detailed example see: sample_mongodb_migrator.go

package my_mongo_db_migrator

import (

// common boilerplate
type MyMongoDbMigrator struct {

func (r *MyMongoDbMigrator) DbName() string {
  return "<target_db_name_for_migration>"

var _ mongodb.MethodsReceiver = (*MyMongoDbMigrator)(nil)

func init() {
  gomethods.RegisterMethodsReceiverForDriver("mongodb", &MyMongoDbMigrator{})

// Here goes the application-specific migration logic
func (r *MyMongoDbMigrator) V001_some_migration_operation_up(session *mgo.Session) error {
  // do something
  return nil

func (r *MyMongoDbMigrator) V001_some_migration_operation_down(session *mgo.Session) error {
  // revert some_migration_operation_up from above
  return nil





View Source
const DRIVER_NAME = "gomethods.mongodb"
View Source
const MIGRATE_C = "db_migrations"


This section is empty.


This section is empty.


type DbMigration

type DbMigration struct {
	Id      bson.ObjectId `bson:"_id"`
	Version uint64        `bson:"version"`

type Driver

type Driver struct {
	Session *mgo.Session
	// contains filtered or unexported fields

func (*Driver) Close

func (driver *Driver) Close() error

func (*Driver) FilenameExtension

func (driver *Driver) FilenameExtension() string

func (*Driver) Initialize

func (driver *Driver) Initialize(url string) error

func (*Driver) Invoke

func (driver *Driver) Invoke(methodName string) error

func (*Driver) MethodsReceiver

func (d *Driver) MethodsReceiver() interface{}

func (*Driver) Migrate

func (driver *Driver) Migrate(f file.File, pipe chan interface{})

func (*Driver) SetMethodsReceiver

func (d *Driver) SetMethodsReceiver(r interface{}) error

func (*Driver) Validate

func (driver *Driver) Validate(methodName string) error

func (*Driver) Version

func (driver *Driver) Version() (uint64, error)

type MethodsReceiver

type MethodsReceiver interface {
	DbName() string

type UnregisteredMethodsReceiverError

type UnregisteredMethodsReceiverError string

func (UnregisteredMethodsReceiverError) Error

type WrongMethodsReceiverTypeError

type WrongMethodsReceiverTypeError string

func (WrongMethodsReceiverTypeError) Error

Source Files


Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL