mcpField
M
mongodb-usage

mongodb-usage

github.com/fcakyonデータ・データベース1.2k47 回インストール今日更新
リポジトリ

mongodb-usage について

スキーマ、インデックス、集約、接続の判断に役立つ、開発者向けの MongoDB ベストプラクティススキルです。実用的な設計指針を扱い、関連する MCP 操作が読み取り専用であることを明記しています。

主な機能

  1. 01埋め込みと参照の指針
  2. 02一般的なドキュメントパターン
  3. 03インデックスの種類と ESR 順序
  4. 04集約パイプラインの性能改善策
  5. 05接続とコネクションプールの推奨事項
  6. 06読み取り専用の MCP 操作

活用シーン

  1. 01埋め込みと参照の選択
  2. 02クエリやソートに応じたインデックス設計
  3. 03集約パイプラインの効率改善

MCP 対応

入力では、MCP 操作は読み取り専用で、書き込み、更新、削除はできないと説明されています。MongoDB のベストプラクティスを提供します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/fcakyon/claude-codex-settings --skill mongodb-usage

インストール後、Claude Code で/mongodb-usageを入力して読み込まれたか確認します。

詳細

MongoDB のベストプラクティス

MCP の制限事項

この MCP は読み取り専用モードで動作します。 書き込み、更新、削除の操作はできません。

スキーマ設計パターン

埋め込みと参照の使い分け

埋め込む場合:

  • データが頻繁に一緒にアクセスされる
  • 子ドキュメントのサイズに上限がある(際限なく増加しない)
  • 1 対少数のリレーションシップ
  • データが頻繁に変更されない

参照する場合:

  • データに個別にアクセスする
  • 多対多のリレーションシップ
  • ドキュメントが 16MB の上限を超える
  • 参照先のデータが頻繁に更新される
よく使われるパターン

サブセットパターン: 頻繁にアクセスするサブセットを親に保存し、すべてのデータを別のコレクションに保存します。

バケットパターン: 時系列データをバケットにグループ化します(例:1 時間ごとの測定値を 1 つのドキュメントにまとめます)。

計算済みパターン: コストの高い計算に使う値を事前に計算して保存します。

インデックス戦略

インデックスのガイドライン
  • クエリ、ソート、集約の $match ステージで使用するフィールドにインデックスを設定します
  • 複合インデックスは、先頭のフィールドに対するクエリをサポートします
  • カバリングクエリ(すべてのフィールドがインデックスに含まれるクエリ)が最速です
  • インデックスが多すぎると書き込みが遅くなります
インデックスの種類
  • 単一フィールド: 1 つのフィールドに対する基本的なインデックス
  • 複合: 複数のフィールドを対象とするインデックス。クエリでは順序が重要です
  • マルチキー: 配列フィールドに対して自動的に作成されます
  • テキスト: 文字列の内容を対象とする全文検索
  • TTL: 一定時間が経過したドキュメントを自動的に期限切れにします
ESR ルール

複合インデックスでは、フィールドを次の順序に並べます。

  1. Equality(完全一致するフィールド)
  2. Sort(ソート順のフィールド)
  3. Range($gt、$lt などの範囲クエリのフィールド)

集約パイプライン

パフォーマンスのヒント
  • ドキュメント数を減らすため、$match と $project を早い段階に配置します
  • 可能な場合は $limit を早い段階で使用します
  • インデックスのない大規模なコレクションに対する $lookup は避けます
  • 1 つのクエリで複数の集約を行うには $facet を使用します
よく使われるステージ
// Filter documents
{ $match: { status: "active" } }

// Reshape documents
{ $project: { name: 1, total: { $sum: "$items.price" } } }

// Group and aggregate
{ $group: { _id: "$category", count: { $sum: 1 } } }

// Sort results
{ $sort: { count: -1 } }

// Join collections
{ $lookup: { from: "orders", localField: "_id", foreignField: "userId", as: "orders" } }

接続のベストプラクティス

接続文字列の形式
  • Atlas: mongodb+srv://user:[email protected]/database
  • ローカル: mongodb://localhost:27017/database
  • レプリカセット: mongodb://host1,host2,host3/database?replicaSet=rs0
コネクションプーリング
  • アプリケーションではコネクションプーリングを使用します(ドライバーではデフォルトで有効です)
  • ワークロードに適したプールサイズを設定します
  • リクエストごとに新しい接続を作成しないでください

避けるべきアンチパターン

  • 上限のない配列: 制限なく増加する配列
  • 巨大なドキュメント: 16MB に近いサイズのドキュメント
  • コレクションの作りすぎ: 代わりに埋め込みを使用します
  • インデックスの不足: コレクション全体をスキャンするクエリ
  • $where 演算子: セキュリティのため、代わりに集約を使用します
  • ドキュメント内へのファイル保存: 大きなファイルには GridFS を使用します

コメント