Memory.listThreads()
The listThreads() method retrieves threads with pagination support and optional filtering by resourceId, metadata, or both.
Usage examplesUsage examples的直接链接
List all threads with paginationList all threads with pagination的直接链接
const result = await memory.listThreads({
page: 0,
perPage: 10,
})
Fetch all threads without paginationFetch all threads without pagination的直接链接
Use perPage: false to retrieve all matching threads at once.
注意
Use pagination, especially for large datasets. Use this option cautiously.
const result = await memory.listThreads({
filter: { resourceId: 'user-123' },
perPage: false,
})
Filter by resourceIdfilter-by-resourceid的直接链接
const result = await memory.listThreads({
filter: { resourceId: 'user-123' },
page: 0,
perPage: 10,
})
Filter by metadataFilter by metadata的直接链接
const result = await memory.listThreads({
filter: { metadata: { category: 'support', priority: 'high' } },
page: 0,
perPage: 10,
})
Combined filter (resourceId & metadata)Combined filter (resourceId & metadata)的直接链接
const result = await memory.listThreads({
filter: {
resourceId: 'user-123',
metadata: { status: 'active' },
},
page: 0,
perPage: 10,
})
ParametersParameters的直接链接
filter?:
{ resourceId?: string; metadata?: Record<string, unknown> }
Optional filter object. resourceId filters threads by resource ID. metadata filters threads by metadata key-value pairs (AND logic - all must match)
page?:
number
Page number (0-indexed) to retrieve
perPage?:
number | false
= 100
Maximum number of threads to return per page, or false to fetch all
orderBy?:
{ field: 'createdAt' | 'updatedAt', direction: 'ASC' | 'DESC' }
Sort configuration with field and direction (defaults to { field: 'createdAt', direction: 'DESC' })
ReturnsReturns的直接链接
result:
Promise<StorageListThreadsOutput>
A promise that resolves to paginated thread results with metadata
The return object contains:
threads: Array of thread objectstotal: Total number of threads matching the filterpage: Current page number (same as the inputpageparameter)perPage: Items per page (same as the inputperPageparameter)hasMore: Boolean indicating if more results are available
Extended usage exampleExtended usage example的直接链接
src/test-memory.ts
import { mastra } from './mastra'
const agent = mastra.getAgent('agent')
const memory = await agent.getMemory()
let currentPage = 0
const perPage = 25
let hasMorePages = true
// Fetch all active threads for a user, sorted by creation date
while (hasMorePages) {
const result = await memory?.listThreads({
filter: {
resourceId: 'user-123',
metadata: { status: 'active' },
},
page: currentPage,
perPage: perPage,
orderBy: { field: 'createdAt', direction: 'ASC' },
})
if (!result) {
console.log('No threads')
break
}
result.threads.forEach(thread => {
console.log(`Thread: ${thread.id}, Created: ${thread.createdAt}`)
})
hasMorePages = result.hasMore
currentPage++ // Move to next page
}
Metadata filteringMetadata filtering的直接链接
The metadata filter uses AND logic - all specified key-value pairs must match for a thread to be included in the results:
// This will only return threads where BOTH conditions are true:
// - category === 'support'
// - priority === 'high'
await memory.listThreads({
filter: {
metadata: {
category: 'support',
priority: 'high',
},
},
})