// AND: all conditions must be truelet results = users.find("age > 25 and city is \"NYC\"")?;// OR: at least one condition must be true let results = users.find("city is \"NYC\" or city is \"LA\"")?;// Complex combinationslet results = users.find( "(age > 25 and city is \"NYC\") or status is \"admin\"")?;
Use parentheses () to control operator precedence in complex queries.
// Check if field value is in listlet results = users.find("status in [\"active\", \"premium\", \"trial\"]")?;// Check if value is NOT in listlet results = users.find("role not in [\"banned\", \"suspended\"]")?;
// Only return name and email (plus _id)let results = users.query() .project(&["name", "email"]) .execute()?;for user in results { // user has _id, name, and email only println!("{}: {}", user["name"], user["email"]);}
// Return all fields except passwordlet results = users.query() .exclude(&["password", "secret_key"]) .execute()?;for user in results { // user has all fields except password and secret_key println!("User: {}", serde_json::to_string_pretty(&user)?);}
let user = users.query() .filter("age > 30") .sort_by("age", SortOrder::Asc) .first()?;if let Some(u) = user { println!("Youngest user over 30: {}", u["name"]);}
use jasonisnthappy::{Database, SortOrder};use serde_json::json;let db = Database::open("my.db")?;let users = db.collection("users");// Complex multi-stage querylet results = users.query() // Filter: active premium users in NYC or LA .filter("status is \"premium\" and (city is \"NYC\" or city is \"LA\")") // Sort by join date (newest first) .sort_by("joined_at", SortOrder::Desc) // Paginate: page 2, 20 items per page .skip(20) .limit(20) // Only return name, email, and city .project(&["name", "email", "city"]) .execute()?;for user in results { println!("{} - {} ({})", user["name"], user["email"], user["city"] );}
// Faster - stops after finding first matchlet user = users.find_one("email is \"alice@example.com\"")?;// Slower - scans entire collectionlet results = users.find("email is \"alice@example.com\"")?;let user = results.first();
Project only needed fields:
// Faster - less data transferredlet results = users.query() .filter("age > 25") .project(&["name", "email"]) .execute()?;// Slower - returns all fieldslet results = users.find("age > 25")?;
// Age between 25 and 35let results = users.find("age >= 25 and age <= 35")?;// Created in the last 7 days (assuming timestamp field)let week_ago = get_timestamp_7_days_ago();let results = users.find(&format!("created_at > {}", week_ago))?;