9个版本
0.1.8 | 2023年1月4日 |
---|---|
0.1.7 | 2022年12月29日 |
0.1.4 | 2022年7月6日 |
0.1.1 | 2022年6月29日 |
#1768 在 数据库接口
每月 137 次下载
38KB
790 行
MongoDB迁移管理工具。
配置
[dependencies]
mongodb-migrator = "0.1.8"
功能
如何使用
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(27017).unwrap();
let url = format!("mongodb://127.0.0.1:{}/", 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,
}
路线图
- 基于Rust的迁移
- 基于JavaScript的迁移
- 日志记录
- 回滚
- 命令行工具
- 用户界面仪表板
- RESTful服务
- 作为npm包
- 策略
- 先失败
- 尝试所有
- 重试
依赖
~32–45MB
~811K SLoC