#mongoose #mongo-db #odm #rust

bin+lib oximod

MongoDB ODM for Rust inspired by Mongoose

3 releases

new 0.1.2 Apr 19, 2025
0.1.1 Apr 18, 2025
0.1.0 Apr 15, 2025

#1374 in Database interfaces

Download history 79/week @ 2025-04-11

79 downloads per month

MIT license

44KB
160 lines

Oximod

A MongoDB ODM for Rust


Overview

Oximod is a schema-based Object-Document Mapper (ODM) for MongoDB, designed for Rust developers who want a familiar and expressive way to model and interact with their data.

Inspired by Mongoose, Oximod brings a structured modeling experience while embracing Rust's type safety and performance. It works with any async runtime and is currently tested using tokio.


Features

  • Schema Modeling with Macros
    Define your collections using idiomatic Rust structs and a simple derive macro.

  • Async-Friendly
    Built for asynchronous Rust. Integrates seamlessly with the mongodb driver.

  • Built-in CRUD Operations
    Use save(), find(), update(), delete(), and more directly on your types.

  • Minimal Boilerplate
    Declare a model in seconds with #[derive(Model)], #[db], and #[collection] attributes.

  • Clear Error Handling
    Strongly typed, developer-friendly errors based on thiserror.


Example

use oximod::{set_global_client, Model};
use serde::{Serialize, Deserialize};
use mongodb::bson::{doc, oid::ObjectId};

#[derive(Debug, Serialize, Deserialize, Model)]
#[db("my_app_db")]
#[collection("users")]
struct User {
    #[serde(skip_serializing_if = "Option::is_none")]
    _id: Option<ObjectId>,
    name: String,
    age: i32,
    active: bool,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    dotenv::dotenv().ok();
    let mongodb_uri = std::env::var("MONGODB_URI")?;
    set_global_client(mongodb_uri).await?;

    let user = User {
        _id: None,
        name: "User1".into(),
        age: 29,
        active: true,
    };

    let id = user.save().await?;
    println!("Inserted user with _id: {}", id);

    Ok(())
}

Running Examples

Monoxide includes a growing set of usage examples:

cargo run --example basic_usage
cargo run --example query
cargo run --example update
cargo run --example delete
cargo run --example by_id

Each file clears previous data on run and demonstrates isolated functionality.

Don't forget to create a .env file:

MONGODB_URI=mongodb://localhost:27017

License

MIT © 2025 Oximod Contributors

⚠️ The name Oximod and this repository represent the official version of the project.
Forks are welcome, but please do not use the name or create similarly named organizations to avoid confusion with the original.


We hope Oximod helps bring joy and structure to your MongoDB experience in Rust.

Contributions welcome!

Dependencies

~17–27MB
~408K SLoC