📄️ Introduction
The ApertureDB query language adds, finds, updates, and deletes objects, connects them in a graph, and retrieves media or descriptors with their metadata. A request is an ordered JSON array of commands, accompanied by binary inputs when a command needs them. Client libraries handle the connection and transport.
📄️ Schema
ApertureDB derives its schema from stored objects and their properties. Adding an object does not require a schema declaration; the schema evolves as data is added. GetSchema reports the resulting classes, properties, and types. Writes must still satisfy the database’s property-type rules. A conflicting write can return status: 5; see Responses.
📄️ API Description
ApertureDB uses one JSON command API for metadata, graph relationships, media, and vectors. Python and C++ clients send commands with a separate ordered list of binary blobs. Together, the command array and blob list form a query. For connection setup, see the client setup guide.
📄️ QueryingData
A query selects objects and specifies the information to return. In a FindEntity command, with_class identifies the class, constraints filters its objects, and results selects the output properties. The same constraint expressions apply to images, videos, and other object types.
📄️ TransactionsAndReferences
A request contains an ordered array of commands. References let a later command use objects selected or created earlier in that request, without sending their identifiers back to the client first. They also avoid fetching properties that the application does not need.
📄️ ReadingResults
A filter selects matching objects; results specifies the information returned about them. Property selection, counts, sorting, and pagination control the response independently of the filter. The examples use the Person objects introduced in Querying data.
📄️ Responses
A query returns JSON plus a separate list of binary blobs. Successful command results normally form an array in query order. Errors can instead be a top-level object, an error object inside a one-element array, or a failure inside a command result. Check every returned status and its info message; checking only for a top-level status misses command failures.
📄️ System-defined Properties
System-defined properties describe an object’s identity, structure, or computed attributes. Their names begin with `. Some, such as uniqueid, apply to all objects; others, such as _label`, belong to particular object types.
📄️ Handling of Missing Data
A requested property that an object does not have is returned as null in JSON (None after decoding into Python). Reading or sorting by that property does not create it. For example, asking for origin returns "origin": null for an apple with no origin property.
📄️ Access Control
ApertureDB controls database access through roles assigned to users. A role defines a set of permissions, and a user receives the combined permissions of all assigned roles. Database users and tokens are separate from accounts used to sign into ApertureDB Cloud. For the UI workflow, see collaboration setup.
📄️ Query and response
A client sends an ordered JSON array of commands and, when needed, an array of
📄️ QuerySemantics
Constraint results depend on value types, numeric precision, and the matching rules of each operator. Indexes can accelerate a query, while vector-search options also determine which candidates are considered. The examples below illustrate these distinctions with small datasets.