use keradb_sdk::connect;
use serde_json::json;
use std::fs;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let db_path = "example_basic.ndb";
println!("=== KeraDB Rust SDK – Basic Example ===\n");
let mut client = connect(db_path)?;
let db = client.database();
let users = db.collection("users");
println!("--- Insert ---");
let r1 = users.insert_one(json!({
"name": "Alice",
"age": 30,
"email": "alice@example.com",
"city": "New York"
}))?;
println!("Inserted Alice → {}", r1.inserted_id);
let r2 = users.insert_one(json!({
"name": "Bob",
"age": 25,
"email": "bob@example.com",
"city": "London"
}))?;
println!("Inserted Bob → {}", r2.inserted_id);
let r3 = users.insert_one(json!({
"name": "Charlie",
"age": 35,
"email": "charlie@example.com",
"city": "Tokyo"
}))?;
println!("Inserted Charlie → {}", r3.inserted_id);
let many = users.insert_many(vec![
json!({"name": "Dave", "age": 28, "city": "Paris"}),
json!({"name": "Eve", "age": 22, "city": "Berlin"}),
json!({"name": "Frank", "age": 40, "city": "New York"}),
])?;
println!("Inserted 3 more → {:?}", many.inserted_ids);
println!("\n--- Find ---");
if let Some(doc) = users.find_one(Some(&json!({"_id": &r1.inserted_id})))? {
println!("find_one Alice: {}", doc["name"]);
}
let all = users.find(None)?.all();
println!("Total documents: {}", all.len());
println!("\n--- Filtered queries ---");
let seniors = users
.find(Some(&json!({"age": {"$gte": 30}})))?
.all();
println!(
"Age >= 30: {}",
seniors
.iter()
.map(|d| d["name"].as_str().unwrap_or("?"))
.collect::<Vec<_>>()
.join(", ")
);
let ny = users
.find(Some(&json!({"city": "New York"})))?
.all();
println!(
"In New York: {}",
ny.iter()
.map(|d| d["name"].as_str().unwrap_or("?"))
.collect::<Vec<_>>()
.join(", ")
);
let paged = users.find(None)?.skip(1).limit(2).all();
println!("Skip 1, limit 2: {} docs", paged.len());
let count = users.count_documents(None)?;
println!("count_documents: {}", count);
println!("\n--- Update ---");
let upd = users.update_one(
&json!({"_id": &r1.inserted_id}),
&json!({"$set": {"age": 31}}),
)?;
println!("update_one → matched={}, modified={}", upd.matched_count, upd.modified_count);
users.update_one(
&json!({"_id": &r2.inserted_id}),
&json!({"$inc": {"age": 1}}),
)?;
let bob = users
.find_one(Some(&json!({"_id": &r2.inserted_id})))?
.unwrap();
println!("Bob age after $inc: {}", bob["age"]);
let upd_many = users.update_many(
&json!({"city": "New York"}),
&json!({"$set": {"country": "USA"}}),
)?;
println!(
"update_many NYC → matched={}, modified={}",
upd_many.matched_count, upd_many.modified_count
);
println!("\n--- Delete ---");
let del = users.delete_one(&json!({"_id": &r3.inserted_id}))?;
println!("delete_one Charlie → deleted={}", del.deleted_count);
let del_many = users.delete_many(&json!({"age": {"$lt": 25}}))?;
println!("delete_many age < 25 → deleted={}", del_many.deleted_count);
println!("\n--- Collections ---");
let col_names = db.list_collection_names()?;
println!("Collections: {:?}", col_names);
client.sync()?;
client.close();
println!("\nDatabase closed ✓");
let _ = fs::remove_file(db_path);
Ok(())
}