Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/mastra-ai/mastra/llms.txt

Use this file to discover all available pages before exploring further.

Overview

MastraVector is the abstract base class for implementing vector store providers in Mastra. Vector stores enable semantic search, RAG (retrieval-augmented generation), and embedding-based memory systems.

Type Definition

abstract class MastraVector<Filter = VectorFilter> extends MastraBase {
  id: string;
  abstract query(params: QueryVectorParams<Filter>): Promise<QueryResult[]>;
  abstract upsert(params: UpsertVectorParams): Promise<string[]>;
  abstract createIndex(params: CreateIndexParams): Promise<void>;
  abstract listIndexes(): Promise<string[]>;
  abstract describeIndex(params: DescribeIndexParams): Promise<IndexStats>;
  abstract deleteIndex(params: DeleteIndexParams): Promise<void>;
  abstract updateVector(params: UpdateVectorParams<Filter>): Promise<void>;
  abstract deleteVector(params: DeleteVectorParams): Promise<void>;
  abstract deleteVectors(params: DeleteVectorsParams<Filter>): Promise<void>;
}

Constructor

constructor({ id }: { id: string })
id
string
required
Unique identifier for the vector store instance. Cannot be empty.

Properties

id
string
Unique identifier for the vector store
indexSeparator
string
default:"'_'"
Separator used in index names (can be overridden by implementations)

Abstract Methods

query

abstract query(params: QueryVectorParams<Filter>): Promise<QueryResult[]>
Performs a similarity search in the vector store.
params
QueryVectorParams
required
Query parameters
results
QueryResult[]
Array of matching results with scores and metadata

upsert

abstract upsert(params: UpsertVectorParams): Promise<string[]>
Inserts or updates vectors in the index.
params
UpsertVectorParams
required
Upsert parameters
ids
string[]
Array of vector IDs that were upserted

createIndex

abstract createIndex(params: CreateIndexParams): Promise<void>
Creates a new vector index.
params
CreateIndexParams
required
Index creation parameters

listIndexes

abstract listIndexes(): Promise<string[]>
Lists all available indexes.
indexes
string[]
Array of index names

describeIndex

abstract describeIndex(params: DescribeIndexParams): Promise<IndexStats>
Gets information about an index.
params
DescribeIndexParams
required
indexName
string
required
Name of the index to describe
stats
IndexStats
Index statistics including dimension, metric, and vector count

deleteIndex

abstract deleteIndex(params: DeleteIndexParams): Promise<void>
Deletes an index.
params
DeleteIndexParams
required
indexName
string
required
Name of the index to delete

updateVector

abstract updateVector(params: UpdateVectorParams<Filter>): Promise<void>
Updates metadata for a specific vector.
params
UpdateVectorParams
required

deleteVector

abstract deleteVector(params: DeleteVectorParams): Promise<void>
Deletes a single vector by ID.
params
DeleteVectorParams
required

deleteVectors

abstract deleteVectors(params: DeleteVectorsParams<Filter>): Promise<void>
Deletes multiple vectors by IDs or metadata filter.
params
DeleteVectorsParams
required

Available Vector Stores

Mastra provides several vector store implementations:
  • @mastra/pinecone - Pinecone vector database
  • @mastra/chroma - ChromaDB vector database
  • @mastra/qdrant - Qdrant vector database
  • @mastra/pg-vector - PostgreSQL with pgvector extension

Example Usage

Basic Vector Operations

import { PineconeVector } from '@mastra/pinecone';
import { OpenAIEmbedder } from '@mastra/embedders';

const vector = new PineconeVector({
  id: 'knowledge-base',
  apiKey: process.env.PINECONE_API_KEY,
  indexName: 'documents'
});

const embedder = new OpenAIEmbedder({
  apiKey: process.env.OPENAI_API_KEY,
  model: 'text-embedding-3-small'
});

// Create index
await vector.createIndex({
  indexName: 'documents',
  dimension: 1536,
  metric: 'cosine'
});

// Embed and upsert documents
const documents = [
  { id: 'doc-1', text: 'Mastra is an AI framework', metadata: { category: 'intro' } },
  { id: 'doc-2', text: 'Agents are autonomous systems', metadata: { category: 'concepts' } }
];

const embeddings = await embedder.embedMany({
  values: documents.map(d => d.text)
});

await vector.upsert({
  indexName: 'documents',
  vectors: documents.map((doc, i) => ({
    id: doc.id,
    values: embeddings.embeddings[i],
    metadata: doc.metadata
  }))
});

// Query vectors
const results = await vector.query({
  indexName: 'documents',
  query: 'What is Mastra?',
  topK: 5,
  filter: { category: 'intro' }
});

console.log(results);

Using with Memory

import { Memory } from '@mastra/memory';
import { PineconeVector } from '@mastra/pinecone';
import { LibSQLStore } from '@mastra/libsql';

const storage = new LibSQLStore({ id: 'storage', url: ':memory:' });
const vector = new PineconeVector({
  id: 'memory-vectors',
  apiKey: process.env.PINECONE_API_KEY,
  indexName: 'memory'
});

const memory = new Memory({
  name: 'conversation-memory',
  storage,
  vector,
  embedder: 'openai/text-embedding-3-small',
  options: {
    semanticRecall: true
  }
});

Bulk Operations

// Delete all vectors from a source
await vector.deleteVectors({
  indexName: 'documents',
  filter: { source_id: 'manual.pdf' }
});

// Delete specific vectors
await vector.deleteVectors({
  indexName: 'documents',
  ids: ['vec_1', 'vec_2', 'vec_3']
});

// Delete old temporary documents
await vector.deleteVectors({
  indexName: 'documents',
  filter: {
    $and: [
      { bucket: 'temp' },
      { indexed_at: { $lt: '2025-01-01' } }
    ]
  }
});

Index Management

// List all indexes
const indexes = await vector.listIndexes();
console.log('Available indexes:', indexes);

// Get index stats
const stats = await vector.describeIndex({ indexName: 'documents' });
console.log('Index stats:', stats);
// { dimension: 1536, metric: 'cosine', vectorCount: 1000 }

// Delete index
await vector.deleteIndex({ indexName: 'old-index' });

Advanced Filtering

// Query with complex filters
const results = await vector.query({
  indexName: 'documents',
  query: 'machine learning concepts',
  topK: 10,
  filter: {
    $and: [
      { category: { $in: ['ml', 'ai'] } },
      { difficulty: { $gte: 'intermediate' } },
      { published: true }
    ]
  }
});

Update Vector Metadata

await vector.updateVector({
  indexName: 'documents',
  id: 'doc-1',
  metadata: {
    category: 'advanced',
    lastModified: new Date().toISOString(),
    views: 1000
  }
});

Using with Mastra

import { Mastra } from '@mastra/core';
import { PineconeVector } from '@mastra/pinecone';

const mastra = new Mastra({
  vectors: {
    knowledge: new PineconeVector({
      id: 'knowledge-base',
      apiKey: process.env.PINECONE_API_KEY,
      indexName: 'knowledge'
    }),
    products: new PineconeVector({
      id: 'product-catalog',
      apiKey: process.env.PINECONE_API_KEY,
      indexName: 'products'
    })
  }
});

// Access vectors from Mastra
const knowledgeBase = mastra.getVector('knowledge');
const results = await knowledgeBase.query({
  indexName: 'knowledge',
  query: 'How does authentication work?',
  topK: 5
});

Build docs developers (and LLMs) love