API Reference
classes
Modelquerybuilder

@coasys/ad4m / Exports / ModelQueryBuilder

Class: ModelQueryBuilder<T>

Query builder for Ad4mModel queries. Allows building queries with a fluent interface and either running them once or subscribing to updates.

Example

const builder = Recipe.query(perspective)
  .where({ category: "Dessert" })
  .order({ rating: "DESC" })
  .limit(10);
 
// Run once
const recipes = await builder.run();
 
// Or subscribe to updates
await builder.subscribe(recipes => {
  console.log("Updated recipes:", recipes);
});

Type parameters

NameType
Textends Ad4mModel

Table of contents

Constructors

Properties

Methods

Constructors

constructor

new ModelQueryBuilder<T>(perspective, ctor, query?)

Type parameters

NameType
Textends Ad4mModel<T>

Parameters

NameType
perspectivePerspectiveProxy
ctortypeof Ad4mModel
query?Query

Defined in

model/Ad4mModel.ts:931

Properties

ctor

Private ctor: typeof Ad4mModel

Defined in

model/Ad4mModel.ts:928


currentSubscription

Private Optional currentSubscription: any

Defined in

model/Ad4mModel.ts:929


modelClassName

Private modelClassName: string = null

Defined in

model/Ad4mModel.ts:927


perspective

Private perspective: PerspectiveProxy

Defined in

model/Ad4mModel.ts:925


queryParams

Private queryParams: Query = {}

Defined in

model/Ad4mModel.ts:926

Methods

collections

collections(collections): ModelQueryBuilder<T>

Specifies which collections to include in the results.

Parameters

NameTypeDescription
collectionsstring[]Array of collection names to include

Returns

ModelQueryBuilder<T>

The query builder for chaining

Example

.collections(["ingredients", "steps"])

Defined in

model/Ad4mModel.ts:1068


count

count(): Promise<number>

Gets the total count of matching entities.

Returns

Promise<number>

Total count

Example

const totalDesserts = await Recipe.query(perspective)
  .where({ category: "Dessert" })
  .count();

Defined in

model/Ad4mModel.ts:1157


countSubscribe

countSubscribe(callback): Promise<number>

Subscribes to count updates for matching entities.

This method:

  1. Creates and initializes a Prolog query subscription for the count
  2. Sets up the callback to process future count updates
  3. Returns the initial count immediately

Remember to call dispose() when you're done with the subscription to clean up resources.

Parameters

NameTypeDescription
callback(count: number) => voidFunction to call with updated count

Returns

Promise<number>

Initial count

Example

const builder = Recipe.query(perspective)
  .where({ status: "active" });
 
const initialCount = await builder.countSubscribe(count => {
  console.log("Active items:", count);
});
 
// When done with subscription:
builder.dispose();

Defined in

model/Ad4mModel.ts:1190


dispose

dispose(): void

Disposes of the current subscription if one exists.

This method:

  1. Stops the keepalive signals to the subscription
  2. Unsubscribes from GraphQL subscription updates
  3. Notifies the backend to clean up subscription resources
  4. Clears the subscription reference

You should call this method when you're done with a subscription to prevent memory leaks and ensure proper cleanup.

Returns

void

Defined in

model/Ad4mModel.ts:949


get

get(): Promise<T[]>

Executes the query once and returns the results.

Returns

Promise<T[]>

Array of matching entities

Example

const recipes = await Recipe.query(perspective)
  .where({ category: "Dessert" })
  .get();

Defined in

model/Ad4mModel.ts:1090


limit

limit(limit): ModelQueryBuilder<T>

Sets the maximum number of results to return.

Parameters

NameTypeDescription
limitnumberMaximum number of results

Returns

ModelQueryBuilder<T>

The query builder for chaining

Example

.limit(10)

Defined in

model/Ad4mModel.ts:1004


offset

offset(offset): ModelQueryBuilder<T>

Sets the number of results to skip.

Parameters

NameTypeDescription
offsetnumberNumber of results to skip

Returns

ModelQueryBuilder<T>

The query builder for chaining

Example

.offset(20) // Skip first 20 results

Defined in

model/Ad4mModel.ts:1020


order

order(orderBy): ModelQueryBuilder<T>

Sets the order for the query results.

Parameters

NameTypeDescription
orderByOrderThe ordering criteria

Returns

ModelQueryBuilder<T>

The query builder for chaining

Example

.order({ createdAt: "DESC" })

Defined in

model/Ad4mModel.ts:988


overrideModelClassName

overrideModelClassName(className): ModelQueryBuilder<T>

Parameters

NameType
classNamestring

Returns

ModelQueryBuilder<T>

Defined in

model/Ad4mModel.ts:1073


paginate

paginate(pageSize, pageNumber): Promise<PaginationResult<T>>

Gets a page of results with pagination metadata.

Parameters

NameTypeDescription
pageSizenumberNumber of items per page
pageNumbernumberWhich page to retrieve (1-based)

Returns

Promise<PaginationResult<T>>

Paginated results with metadata

Example

const page = await Recipe.query(perspective)
  .where({ category: "Main" })
  .paginate(10, 1);
console.log(`Page ${page.pageNumber}, ${page.results.length} of ${page.totalCount}`);

Defined in

model/Ad4mModel.ts:1221


paginateSubscribe

paginateSubscribe(pageSize, pageNumber, callback): Promise<PaginationResult<T>>

Subscribes to paginated results updates.

This method:

  1. Creates and initializes a Prolog query subscription for the paginated results
  2. Sets up the callback to process future page updates
  3. Returns the initial page immediately

Remember to call dispose() when you're done with the subscription to clean up resources.

Parameters

NameTypeDescription
pageSizenumberNumber of items per page
pageNumbernumberWhich page to retrieve (1-based)
callback(results: PaginationResult<T>) => voidFunction to call with updated pagination results

Returns

Promise<PaginationResult<T>>

Initial pagination results

Example

const builder = Recipe.query(perspective)
  .where({ category: "Main" });
 
const initialPage = await builder.paginateSubscribe(10, 1, page => {
  console.log("Updated page:", page.results);
});
 
// When done with subscription:
builder.dispose();

Defined in

model/Ad4mModel.ts:1258


properties

properties(properties): ModelQueryBuilder<T>

Specifies which properties to include in the results.

Parameters

NameTypeDescription
propertiesstring[]Array of property names to include

Returns

ModelQueryBuilder<T>

The query builder for chaining

Example

.properties(["name", "description", "rating"])

Defined in

model/Ad4mModel.ts:1052


source

source(source): ModelQueryBuilder<T>

Sets the source filter for the query.

Parameters

NameTypeDescription
sourcestringThe source to filter by

Returns

ModelQueryBuilder<T>

The query builder for chaining

Example

.source("ad4m://self")

Defined in

model/Ad4mModel.ts:1036


subscribe

subscribe(callback): Promise<T[]>

Subscribes to the query and receives updates when results change.

This method:

  1. Creates and initializes a Prolog query subscription
  2. Sets up the callback to process future updates
  3. Returns the initial results immediately

Remember to call dispose() when you're done with the subscription to clean up resources.

Parameters

NameTypeDescription
callback(results: T[]) => voidFunction to call with updated results

Returns

Promise<T[]>

Initial results array

Example

const builder = Recipe.query(perspective)
  .where({ status: "cooking" });
 
const initialRecipes = await builder.subscribe(recipes => {
  console.log("Updated recipes:", recipes);
});
 
// When done with subscription:
builder.dispose();

Defined in

model/Ad4mModel.ts:1124


where

where(conditions): ModelQueryBuilder<T>

Adds where conditions to the query.

Parameters

NameTypeDescription
conditionsWhereThe conditions to filter by

Returns

ModelQueryBuilder<T>

The query builder for chaining

Example

.where({
  category: "Dessert",
  rating: { gt: 4 },
  tags: ["vegan", "quick"],
  published: true
})

Defined in

model/Ad4mModel.ts:972