Skip to content

Mongodb migrations managing tool

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

kakoc/mongodb_migrator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d6c8698 · Jun 7, 2023

History

68 Commits
Jun 7, 2023
Jun 7, 2023
Jun 7, 2023
Jun 7, 2023
Dec 12, 2020
Jun 7, 2023
Jun 7, 2023
Jun 7, 2023
Jun 29, 2022
Jun 29, 2022
Jun 7, 2023

Repository files navigation

github crates.io docs.rs build status codecov.io

Mongodb migrations management tool.

Setup

[dependencies]
mongodb-migrator = "0.1.8"

Functionality

How to use

use anyhow::Result;
use async_trait::async_trait;
use mongodb::Database;
use serde_derive::{Deserialize, Serialize};
use testcontainers::Docker;

use mongodb_migrator::migration::Migration;

#[tokio::main]
async fn main() -> Result<()> {
    let docker = testcontainers::clients::Cli::default();
    let node = docker.run(testcontainers::images::mongo::Mongo::default());
    let host_port = node.get_host_port_ipv4(27017);
    let url = format!("mongodb://localhost:{}/", host_port);
    let client = mongodb::Client::with_uri_str(url).await.unwrap();
    let db = client.database("test");

    let migrations: Vec<Box<dyn Migration>> = vec![Box::new(M0 {}), Box::new(M1 {})];
    mongodb_migrator::migrator::DefaultMigrator::new()
        .with_conn(db.clone())
        .with_migrations_vec(migrations)
        .up()
        .await?;

    Ok(())
}

struct M0 {}
struct M1 {}

#[async_trait]
impl Migration for M0 {
    async fn up(&self, db: Database) -> Result<()> {
        db.collection("users")
            .insert_one(bson::doc! { "name": "Batman" }, None)
            .await?;

        Ok(())
    }
}

#[async_trait]
impl Migration for M1 {
    async fn up(&self, db: Database) -> Result<()> {
        db.collection::<Users>("users")
            .update_one(
                bson::doc! { "name": "Batman" },
                bson::doc! { "$set": { "name": "Superman" } },
                None,
            )
            .await?;

        Ok(())
    }
}

#[derive(Serialize, Deserialize)]
struct Users {
    name: String,
}

Roadmap

  • Rust based migrations
  • JavaScript based migrations
  • Logging
  • Rollbacks
  • Cli tool
  • UI dashboard
  • RESTful service
  • As npm package
  • Stragegies
    • Fail first
    • Try all
    • Retries

About

Mongodb migrations managing tool

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages