AccessPattern
The AccessPattern
utility allows you to quickly build QueryCommands
on a Table
:
import { AccessPattern } from 'dynamodb-toolbox/table/actions/accessPattern'
const highLevelPokemons = PokeTable.build(AccessPattern)
// Optional: limit scope to specific entities
.entities(TrainerEntity, PokemonEntity, ...)
// Define the expected query input schema
.schema(map({ trainerId: string(), level: number() }))
// Declare the query pattern
.pattern(({ trainerId, level }) => ({
index: 'byLevel',
partition: trainerId,
range: { gte: level }
}))
// Optional: provide additional options
.options({ maxPages: 3 })
const { Items } = await highLevelPokemons
.query({ trainerId, level: 70 })
.send()
Remember that schemas can be composed or derived from existing ones:
const queryPokemonsByLevel = PokeTable.build(AccessPattern)
.entities(PokemonEntity)
.schema(pokemonSchema.pick('trainerId', 'level'))
For single Entity
access patterns, see the dedicated AccessPattern
Entity Action.
Methodsβ
.entities(...)
β
Provides a list of entities to filter the returned items of the resulting QueryCommand
(via the internal entity
attribute). Also formats them and types the response (see QueryCommands
for more details):
const pokemonAccessPattern = PokeTable.build(AccessPattern)
.entities(TrainerEntity, PokemonEntity, ...)
.schema(...)
β
(required)
Defines the input schema for the pattern parameters (see the Schema Section for more details):
import { string } from 'dynamodb-toolbox/schema/string'
const stringAccessPattern =
PokeTable.build(AccessPattern).schema(string())
.pattern(...)
β
(required)
Defines how pattern inputs (parsed by the schema
) are translated into a query
, i.e. an object containing:
partition
: The partition key to queryindex (optional)
: The name of a secondary index to queryrange (optional)
: If the table or index has a sort key, an additional Range or Equality Condition
const stringAccessPattern = PokeTable.build(AccessPattern)
.schema(string())
.pattern(str => ({ partition: str }))
It is advised to provide entities
and schema
first as they constrain the pattern
type.
.options(...)
β
Provides additional options to the resulting QueryCommands
(see QueryCommands
for more details):
const projectedPattern = PokeTable.build(AccessPattern)
.entities(TrainerEntity, PokemonEntity)
.options({ attributes: ['name', 'trainerId'] })
It is advised to provide entities
first as it constrains the options
type.
.meta(...)
β
Adds metadata to the AccessPattern
.
The meta
object can include a title
and description
, both of which must be strings. Additional fields can be of any type:
const pokemonsByLevelPattern = PokeTable.build(AccessPattern)
.meta({
title: 'Trainer PokΓ©mons by Level',
description:
'Returns the pokemons of a trainer (`trainerId`) above a given level (`minLevel`)',
other: { field: 'of any type' }
})
Metadata is especially useful when building MCPToolkit
Actions.
.query(...)
β
Produces a QueryCommand
from valid pattern inputs:
const queryCommand = highLevelPokemons
.query({ trainerId, level: 70 })
const { Items } = await queryCommand
// Optional: Refine queryCommand
.options({ consistent: true })
.send()