Query Object
You can initialize a query in the following ways:
- The recommended way:
Object::query()
(only works ifObject
implementsRecord
)
- Unsafe ways:
Query::new("CollectionName")
query!("CollectionName")
You can customize the query with the following methods:
filter()
you can specify AQL comparisonsprune()
you can specify blocking AQL comparisons for traversal queriessort()
you can specify fields to sort withlimit()
you can skip and limit the query resultsdistinct()
you can skip duplicate documents
The order of operations will be respected in the rendered AQL query (except for
distinct
)
Then you can call a query in the following ways:
query.call::<Object>(&database_connection)
Object::get(&query, &database_connection
Which will return a JsonQueryResult
containing a Vec
of serde_json::Value
.
JsonQueryResult
can return deserialized models as DatabaseRecord
by calling .get_records::<T>()
Filter
You can initialize a Filter
with Filter::new(comparison)
Each comparison is a Comparison
struct built via ComparisonBuilder
:
#![allow(unused_variables)] fn main() { // for a simple field comparison // Explicit Comparison::field("some_field").some_comparison("compared_value"); // Macro compare!(field "some_field").some_comparison("compared_value"); // for field arrays (see ArangoDB operators) // Explicit Comparison::all("some_field_array").some_comparison("compared_value"); // Macro compare!(all "some_field_array").some_comparison("compared_value"); // Explicit Comparison::any("some_field_array").some_comparison("compared_value"); // Macro compare!(any "some_field_array").some_comparison("compared_value"); // Explicit Comparison::none("some_field_array").some_comparison("compared_value"); // Macro compare!(none "some_field_array").some_comparison("compared_value"); }
All the currently implemented comparison methods are listed under ComparisonBuilder documentation page.
Filters can be defined explicitly like this:
#![allow(unused_variables)] fn main() { let filter = Filter::new(Comparison::field("name").equals_str("felix")); }
or
#![allow(unused_variables)] fn main() { use aragog::query::{Filter, Comparison}; let filter :Filter = Comparison::field("name").equals_str("felix").into(); }
Example
#![allow(unused_variables)] fn main() { let query = Query::new("Company").filter( Filter::new( Comparison::field("company_name").not_like("%google%")) .and(Comparison::field("company_age").greater_than(15)) .or(Comparison::any("emails").like("%gmail.com")) .and(Comparison::field("roles").in_str_array(&["SHIPPER", "FORWARDER"])) ); }