*mgo.Session
parameter and return error
on failure.db_migrations
. This collection will be auto-generated.import "gopkg.in/mattes/migrate.v1/migrate" // 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.
The migration files should have an “.mgo” extension and contain a list of registered methods names.
Migration methods should satisfy the following:
func (*mgo.Session) error
Recommended (but not required) naming conventions for migration methods:
001_first_release.up.mgo
V001_some_migration_operation_up V001_some_other_operation_up ...
001_first_release.down.mgo
V001_some_other_operation_down V001_some_migration_operation_down ...
For a detailed example see: sample_mongodb_migrator.go
package my_mongo_db_migrator import ( "gopkg.in/mattes/migrate.v1/driver/mongodb" "gopkg.in/mattes/migrate.v1/driver/mongodb/gomethods" "gopkg.in/mgo.v2" ) // 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 }