1 个不稳定发布

0.1.0 2023年12月17日

#143 in #mongo-db

MIT/Apache

20KB
263

Spark-ORM:Rust语言的MongoDB ORM库

Spark-ORM是一个高性能、开源的对象关系映射(ORM)库,专为MongoDB设计,在Rust中无缝地将Rust结构体与MongoDB集合桥接,轻松将结构体转换为模型。

特性

  • 模型派生:使用Model特质派生轻松将Rust结构体转换为MongoDB模型。

  • 自定义集合名称:使用#[coll_name]属性为您的模型定制集合名称。

  • 内存效率:为速度和内存效率而构建,Spark-ORM为MongoDB提供了一种非堆拷贝ORM解决方案。

入门

  1. 通过简单地应用Model属性并使用coll_name设置集合名称来定义您的模型。

    #[Model(coll_name = "users")]
    #[derive(Serialize, Deserialize, Default, Debug)]
    struct User {
    age: u32,
    name: String,
    email: String,
    }
    
  2. 以两种方式之一连接到数据库

    a. 建立全局连接

    Spark::global_connect("root", "123", "localhost", "6789", "rm_orm_db").await;
    

    b. 或本地连接

    Spark::connect("root", "123", "localhost", "6789", "rm_orm_db").await;
    

    对于全局连接,Spark在整个程序中保留它,可通过:Spark::get_db(); 访问。

用法

实例化模型

    let mut user = User::new_model(Some(&db));

或者您可以使用全局连接

 let mut user = User::new_model(None);

如果没有设置全局连接,则new_model函数将panic


更新属性

   user.name = "Hossein".to_string();
   user.age = 22;

保存到数据库

   user.save().await.unwrap();

查找模型

        let mut user_model = User::new_model(Some(&db)); 
        let mut sample = User::default ();
        sample.name = "Hossein".to_string();
        let founded = user_model.find_one(
            sample,
            None,
            ).await.unwrap();
        println!("The founded object {:?} ", founded);

更新并保存

    let mut user = User::new_model(Some(&db));
    user.name = "Hossein".to_string();
    user.email = "spark_orm_test".to_string();

    user.save().await;

    user.name = "Nothing".to_string();

    user.save().await;

或者

      let db = get_db().await;
      let user_model = User::new_model(Some(&db));
      let updated = user_model.update(
      doc! {
                  "name": "Hossein",
              },
      doc! {
                  "$set": {
                      "name": "Hossein 33"
                  }
              },
      None,
      ).await.unwrap();
       println!("The Updated info {:?}", updated);

删除记录

        let mut user = User::new_model(Some(&db));
        user.delete().await;

注意:您可以使用?代替unwrap

模型

模型特质为您的基本结构体添加_id、时间戳(created_at、updated_at、deleted_at),并自动填充。

属性

为结构体字段定义索引或唯一属性

   #[Model(coll_name = "products")]
   #[derive(Serialize, Deserialize, Default, Debug)]
   struct Product {
       #[index]
       age: u32,
       #[index]
       name: String,
       #[unique]
       email: String,
   }

这些索引在第一次初始化Product时注册。

我在GitHub上非常感谢您的支持。请考虑给我一个star以表示您的支持。谢谢!

请注意,该库正在开发中,未来可能会有很多变化,甚至在基本功能上。

依赖关系

~285–750KB
~17K SLoC