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