1 个不稳定发布

0.1.0 2023年12月18日

#144#mongo-db


用于 rm_orm

MIT/Apache

20KB
263 代码行

Spark-ORM:Rust的MongoDB ORM库

Spark-ORM是一个高性能、开源的对象关系映射(ORM)库,专门为MongoDB设计,旨在无缝地将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以表示您的支持。谢谢!

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

依赖项

~310–780KB
~18K SLoC