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