Skip to main content

Querying with Filters

All ekoDB client libraries provide a QueryBuilder for constructing complex queries with filters, sorting, and pagination using a fluent API.

Simple Query​

use ekodb_client::{Client, QueryBuilder};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::builder()
.base_url("https://my-first-db.development.google.ekodb.net")
.api_key("YOUR_API_KEY")
.build()?;

// Find active users
let query = QueryBuilder::new()
.eq("status", "active")
.build();

let result = client.find("users", query, None).await?;
println!("{:?}", result);
Ok(())
}

Complex Query​

Find active users aged 18-65 with gmail addresses, sorted by creation date:

let query = QueryBuilder::new()
.eq("status", "active")
.gte("age", 18)
.lte("age", 65)
.contains("email", "@gmail.com")
.sort_desc("created_at")
.limit(20)
.build();

let result = client.find("users", query, None).await?;

Logical Operators​

OR Query​

Find users who are either admins or moderators:

use serde_json::json;

let query = QueryBuilder::new()
.or(vec![
json!({
"type": "Condition",
"content": {
"field": "role",
"operator": "Eq",
"value": "admin"
}
}),
json!({
"type": "Condition",
"content": {
"field": "role",
"operator": "Eq",
"value": "moderator"
}
}),
])
.build();

String Operators​

StartsWith​

let query = QueryBuilder::new()
.starts_with("name", "Dr. ")
.build();

EndsWith​

let query = QueryBuilder::new()
.ends_with("email", ".edu")
.build();

Contains​

let query = QueryBuilder::new()
.contains("description", "urgent")
.build();

Pagination​

Page through results with skip and limit:

// Page 2 with 20 items per page
let query = QueryBuilder::new()
.eq("status", "active")
.page(2, 20) // skip: 40, limit: 20
.sort_desc("created_at")
.build();

Available Operators​

Comparison Operators​

MethodOperatorDescription
.eq(field, value)EqEquals
.ne(field, value)NeNot equals
.gt(field, value)GtGreater than
.gte(field, value)GteGreater than or equal
.lt(field, value)LtLess than
.lte(field, value)LteLess than or equal
.in(field, array)InValue in array
.nin(field, array)NotInValue not in array

String Operators​

MethodOperatorDescription
.contains(field, substring)ContainsSubstring match
.startsWith(field, prefix)StartsWithPrefix match
.endsWith(field, suffix)EndsWithSuffix match

Logical Operators​

MethodDescription
.and(conditions)All conditions must match
.or(conditions)At least one condition must match
.not(condition)Negate a condition

Sorting & Pagination​

MethodDescription
.sortAsc(field)Sort ascending
.sortDesc(field)Sort descending
.limit(n)Max results to return
.skip(n)Results to skip
.page(page, size)Convenience method for pagination

Query Expression Reference​

For the complete reference including all operators, JSON structure, and advanced patterns, see:

Query Expressions Reference

Complete QueryBuilder Examples

QueryBuilder examples - Complex queries with filtering, sorting, and pagination:

  • Rust: client_query_builder.rs
  • Python: client_query_builder.py
  • TypeScript: client_query_builder.ts
  • JavaScript: client_query_builder.js
  • Go: client_query_builder.go
  • Kotlin: ClientQueryBuilder.kt

Next Steps​

Need Help?​