use mongodb::bson::{doc, oid::ObjectId};
use oximod::{Model, OxiClient};
use serde::{Deserialize, Serialize};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv::dotenv().ok();
let mongodb_uri = std::env::var("MONGODB_URI")?;
OxiClient::init_global(mongodb_uri).await?;
#[derive(Debug, Serialize, Deserialize, Model)]
#[db("delete_example_db")]
#[collection("users")]
struct User {
#[serde(skip_serializing_if = "Option::is_none")]
_id: Option<ObjectId>,
name: String,
age: i32,
#[default(true)]
active: bool,
}
User::clear().await?;
let users = vec![
User::new().name("User1").age(20).active(false),
User::new().name("User2").age(25).active(false),
User::new().name("User3").age(30),
User::new().name("User4").age(30),
];
let mut inserted_ids = vec![];
for user in users {
let id = user.save().await?;
inserted_ids.push(id);
}
let collection = User::get_collection()?;
let result = collection.delete_many(doc! { "active": false }).await?;
println!("๐๏ธ Deleted {} inactive users", result.deleted_count);
let result = collection.delete_one(doc! { "active": true }).await?;
println!("๐งน Deleted {} active user(s)", result.deleted_count);
if let Some(id) = inserted_ids.pop() {
let result = User::delete_by_id(id).await?;
println!(
"โ Deleted by ID using Model::delete_by_id โ {}",
result.deleted_count
);
}
Ok(())
}