spark-orm 0.2.2

Mongodb ORM in Rust
Documentation
# Spark-ORM: MongoDB ORM for Rust


Spark-ORM is a high-performance, open-source Object-Relational Mapping (ORM) library designed specifically for MongoDB in Rust. It seamlessly bridges Rust structs with MongoDB collections, effortlessly converting structs into models.

## Features


- **Derive Models**: Effortlessly convert Rust structs into MongoDB models using the `Model` trait derivation.

- **Custom Collection Names**: Tailor collection names for your models with the `#[coll_name]` attribute.

- **Memory Efficiency**: Built for speed and memory efficiency, Spark-ORM offers a non-heap copy ORM solution for MongoDB.

## Getting Started


1. Define your model by simply applying the `Model` attribute and setting the collection name with `coll_name`:

    ```rust
   #[Model(coll_name = "users")]
   #[derive(Serialize, Deserialize, Default, Debug)]
   struct User {
    age: u32,
    name: String,
    email: String,
   }
    ```

2. Connect to the database in one of two ways:

   a. Establish a global connection:
      ```rust
      Spark::global_connect("root", "123", "localhost", "6789", "rm_orm_db").await;
      ```

   b. Or connect locally:
      ```rust
      Spark::connect("root", "123", "localhost", "6789", "rm_orm_db").await;
      ```

   For the global connection, Spark retains it throughout the program, accessible via: ``Spark::get_db();``

## Usage 


Instantiate the model:

```rust
    let mut user = User::new_model(&db);
```
Update attributes:

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

Save to the database:


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

---

Find a model:


```rust
       let mut user = User::new_model(&db);
       let sample = doc! {
            "name" : "Hossein",
            "email" : "spark_orm_test"
       };
       user.find_one(Prototype::Doc(sample)).await.unwrap().unwrap();
       println!("{}" , user.name);
```

---

Update and save:


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

    user.save().await;

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

    user.update().await;
```

--- 
Delete a record:


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

## Attributes


Define index or unique attributes for struct fields:


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

```

These indexes are registered during the first initiation of Product.

#  Note the library is under development and may have lots of changes in the future, event in its basics