Documentation Index Fetch the complete documentation index at: https://docs.helix-db.com/llms.txt
Use this file to discover all available pages before exploring further.
For the complete documentation index optimized for AI agents, see llms.txt .
Aggregate Results with Full Data Objects
AGGREGATE_BY organizes query results into groups based on one or more property values, returning both count summaries and the full data objects for each group.
::AGGREGATE_BY(property)
::AGGREGATE_BY(property1, property2)
Returns grouped data with full objects:
[
{
'count' : 3 ,
'data' : [
{ "property1" : value1 , "property2" : "Alice" , ... },
{ "property1" : value1 , "property2" : "Charlie" , ... },
{ "property1" : value1 , "property2" : "Frank" , ... }
]
},
{
'count' : 2 ,
'data' : [
{ "property1" : value2 , "property2" : "Bob" , ... },
{ "property1" : value2 , "property2" : "Diana" , ... }
]
},
...
]
See all 18 lines
AGGREGATE_BY returns the full data objects grouped by the specified properties, providing both count and the actual grouped elements for detailed analysis. This is useful when you need to work with the actual data in each group, not just counts.
When using the SDKs or curling the endpoint, the query name must match what is defined in the queries.hx file exactly.
Example 1: Aggregate orders by status
QUERY AggregateOrdersByStatus () =>
orders <- N<Order>
RETURN orders::AGGREGATE_BY(status)
QUERY CreateOrder (customer_name: String, status: String, total: F64) =>
order <- AddN<Order>({
customer_name: customer_name,
status: status,
total: total
})
RETURN order
See all 12 lines
Here’s how to run the query using the SDKs or curl
Python
Rust
Go
TypeScript
Curl
from helix.client import Client
client = Client( local = True , port = 6969 )
orders = [
{ "customer_name" : "Alice" , "status" : "pending" , "total" : 99.99 },
{ "customer_name" : "Bob" , "status" : "shipped" , "total" : 149.99 },
{ "customer_name" : "Charlie" , "status" : "pending" , "total" : 75.50 },
{ "customer_name" : "Diana" , "status" : "delivered" , "total" : 200.00 },
{ "customer_name" : "Eve" , "status" : "shipped" , "total" : 89.99 },
{ "customer_name" : "Frank" , "status" : "pending" , "total" : 125.00 },
]
for order in orders:
client.query( "CreateOrder" , order)
result = client.query( "AggregateOrdersByStatus" , {})
print ( "Orders aggregated by status:" , result)
See all 18 lines
Example 2: Aggregate products by category with COUNT
QUERY CountProductsByCategory () =>
products <- N<Product>
RETURN products::COUNT::AGGREGATE_BY(category)
QUERY CreateProduct (name: String, category: String, price: F64, stock: I32) =>
product <- AddN<Product>({
name: name,
category: category,
price: price,
stock: stock
})
RETURN product
See all 13 lines
Here’s how to run the query using the SDKs or curl
Python
Rust
Go
TypeScript
Curl
from helix.client import Client
client = Client( local = True , port = 6969 )
products = [
{ "name" : "Laptop" , "category" : "Electronics" , "price" : 999.99 , "stock" : 15 },
{ "name" : "Mouse" , "category" : "Electronics" , "price" : 29.99 , "stock" : 50 },
{ "name" : "Desk" , "category" : "Furniture" , "price" : 299.99 , "stock" : 10 },
{ "name" : "Chair" , "category" : "Furniture" , "price" : 199.99 , "stock" : 20 },
{ "name" : "Monitor" , "category" : "Electronics" , "price" : 399.99 , "stock" : 25 },
{ "name" : "Bookshelf" , "category" : "Furniture" , "price" : 149.99 , "stock" : 12 },
]
for product in products:
client.query( "CreateProduct" , product)
result = client.query( "CountProductsByCategory" , {})
print ( "Product count aggregated by category:" , result)
See all 18 lines
When to Use AGGREGATE_BY vs GROUP_BY
Choose AGGREGATE_BY when:
You need the actual data objects in each group
You want to perform further processing on grouped items
You need to display or return the full records
You’re building reports that show detailed breakdowns
Choose GROUP_BY when:
You only need counts and summaries
Memory efficiency is a priority
You’re doing analytics or dashboards showing distributions
You don’t need the actual data, just statistics
AGGREGATE_BY returns more data than GROUP_BY, so it uses more memory and bandwidth. Use GROUP_BY when you only need counts.
Group By Group results with count summaries only
Grouping Guide When to use GROUP_BY vs AGGREGATE_BY
COUNT Operation Count operation and other result operations
Property Access Property filtering and access patterns