Skip to Content

MongoDB Vector Store

MongoDBVector クラスは、MongoDB Atlas Vector Search を使用したベクター検索を提供します。これにより、MongoDB コレクション内で効率的な類似性検索とメタデータフィルタリングが可能になります。

インストール

npm install @mastra/mongodb

使用例

import { MongoDBVector } from "@mastra/mongodb"; const store = new MongoDBVector({ url: process.env.MONGODB_URL, database: process.env.MONGODB_DATABASE, });

コンストラクターオプション

url:

string
MongoDB 接続文字列 (URI)

database:

string
使用する MongoDB データベース名

options?:

MongoClientOptions
オプションの MongoDB クライアントオプション

メソッド

createIndex()

MongoDBに新しいベクターインデックス(コレクション)を作成します。

indexName:

string
作成するコレクションの名前

dimension:

number
ベクターの次元数(埋め込みモデルと一致する必要があります)

metric?:

'cosine' | 'euclidean' | 'dotproduct'
= cosine
類似性検索のための距離メトリック

upsert()

コレクションにベクターとそのメタデータを追加または更新します。

indexName:

string
挿入先のコレクション名

vectors:

number[][]
埋め込みベクターの配列

metadata?:

Record<string, any>[]
各ベクターのメタデータ

ids?:

string[]
オプションのベクターID(提供されない場合は自動生成)

query()

オプションのメタデータフィルタリングを使用して類似ベクターを検索します。

indexName:

string
検索対象のコレクション名

queryVector:

number[]
類似ベクターを見つけるためのクエリベクター

topK?:

number
= 10
返す結果の数

filter?:

Record<string, any>
メタデータフィルター(`metadata`フィールドに適用)

documentFilter?:

Record<string, any>
元のドキュメントフィールドのフィルター(メタデータだけでなく)

includeVector?:

boolean
= false
結果にベクターデータを含めるかどうか

minScore?:

number
= 0
最小類似性スコアの閾値

describeIndex()

インデックス(コレクション)に関する情報を返します。

indexName:

string
説明するコレクションの名前

戻り値:

interface IndexStats { dimension: number; count: number; metric: "cosine" | "euclidean" | "dotproduct"; }

deleteIndex()

コレクションとそのすべてのデータを削除します。

indexName:

string
削除するコレクションの名前

listIndexes()

MongoDBデータベース内のすべてのベクターコレクションをリストします。

戻り値:Promise<string[]>

updateVector()

IDによって特定のベクターエントリを新しいベクターデータやメタデータで更新します。

indexName:

string
ベクターを含むコレクションの名前

id:

string
更新するベクターエントリのID

update:

object
ベクターやメタデータを含む更新データ

update.vector?:

number[]
更新する新しいベクターデータ

update.metadata?:

Record<string, any>
更新する新しいメタデータ

deleteVector()

IDによってインデックスから特定のベクターエントリを削除します。

indexName:

string
ベクターを含むコレクションの名前

id:

string
削除するベクターエントリのID

disconnect()

MongoDBクライアントの接続を閉じます。ストアの使用が終わったら呼び出す必要があります。

レスポンスタイプ

クエリ結果は次の形式で返されます:

interface QueryResult { id: string; score: number; metadata: Record<string, any>; vector?: number[]; // Only included if includeVector is true }

エラー処理

ストアは捕捉可能な型付きエラーをスローします:

try { await store.query({ indexName: "my_collection", queryVector: queryVector, }); } catch (error) { // Handle specific error cases if (error.message.includes("Invalid collection name")) { console.error( "Collection name must start with a letter or underscore and contain only valid characters.", ); } else if (error.message.includes("Collection not found")) { console.error("The specified collection does not exist"); } else { console.error("Vector store error:", error.message); } }

ベストプラクティス

  • クエリのパフォーマンスを最適化するために、フィルターで使用するメタデータフィールドにインデックスを作成してください。
  • 予期しないクエリ結果を避けるために、メタデータ内のフィールド名を一貫して使用してください。
  • 効率的な検索を維持するために、インデックスやコレクションの統計情報を定期的に監視してください。

関連