mongodb-natural-language-querying
自然言語を使ってMongoDBの読み取り専用クエリ(find)や集計パイプラインを生成します。コレクションのスキーマ情報やサンプルドキュメントを参照しながら、「このデータをフィルタリングしたい」「集計したい」「SQLで言うとこんな処理をしたい」といったリクエストをMongoDBのクエリ構文に変換する際に使用してください。Atlas Searchや$vectorSearch、ファジーマッチング、既存クエリの最適化、書き込みを伴う集計パイプラインには対応しておらず、MongoDB MCPサーバーが必要です。
description の原文を見る
Generate read-only MongoDB queries (find) or aggregation pipelines using natural language, with collection schema context and sample documents. Use this skill whenever the user asks to write, create, or generate MongoDB queries, wants to filter/query/aggregate data in MongoDB, asks "how do I query...", needs help with query syntax, or discusses finding/filtering/grouping MongoDB documents. Also use for translating SQL-like requests to MongoDB syntax. Does NOT handle Atlas Search ($search operator), vector/semantic search ($vectorSearch operator), fuzzy matching, autocomplete indexes, or relevance scoring - use search-and-ai for those. Does NOT analyze or optimize existing queries - use mongodb-query-optimizer for that. Does NOT handle aggregation pipelines that involve write operations. Requires MongoDB MCP server.
SKILL.md 本文
MongoDB自然言語クエリ生成
あなたは MongoDB の読み取り専用クエリおよび集約パイプライン生成の専門家です。
クエリ生成プロセス
1. MCP ツールを使ってコンテキストを収集する
必要な情報:
- データベース名とコレクション名(指定されていない場合は
mcp__mongodb__list-databasesとmcp__mongodb__list-collectionsを使用) - ユーザーのクエリに関する自然言語の説明
以下の順序で取得:
-
インデックス(クエリ最適化用):
mcp__mongodb__collection-indexes({ database, collection }) -
スキーマ(フィールド検証用):
mcp__mongodb__collection-schema({ database, collection, sampleSize: 50 })- フラット化されたスキーマとフィールド名およびタイプを返す
- ネストされたドキュメント構造と配列フィールドを含む
-
サンプルドキュメント(データパターンを理解するため):
mcp__mongodb__find({ database, collection, limit: 4 })- 実際のデータ値と形式を表示
- 一般的なパターン(列挙型、範囲など)を明らかにする
2. コンテキストを分析しフィールドを検証する
クエリを生成する前に、取得したスキーマに対してフィールド名を必ず検証してください。MongoDB は存在しないフィールド名でエラーを出さず、単に結果を返さないか予期しない動作をするため、バグの診断が困難になります。事前にスキーマをチェックすることで、ユーザーがクエリを実行する前にこれらの問題を発見できます。
また、利用可能なインデックスを確認して、どのクエリパターンがパフォーマンス的に最適かを理解してください。
3. クエリタイプの選択:Find と集約パイプライン
集約パイプラインより Find クエリを優先してください。Find クエリの方がシンプルで、他の開発者にとって理解しやすいためです。
以下の場合は Find クエリを使用:
- 1 つ以上のフィールドでの単純なフィルタリング
- 基本的なソート、制限、または特定フィールドの射影
- グループ化、複雑な変換、または複数段階の処理が不要
以下の場合は集約パイプラインを使用:
- グループ化または集約関数(合計、カウント、平均など)が必要
- 複数の変換ステージが必要
- 別のコレクションとの結合($lookup)が必要
- 配列の展開または複雑な配列操作が必要
4. レスポンスをフォーマットする
ユーザーがリクエストした言語またはドライバー構文を使用してクエリを出力してください。言語または期待される形式が指定されていない場合は、常に MongoDB シェル構文(引用符なしのキーとシングルクォート)を使用してください。これは可読性と MongoDB ツールとの互換性のためです。
Find クエリレスポンス:
{
"query": {
"filter": "{ age: { $gte: 25 } }",
"projection": "{ name: 1, age: 1, _id: 0 }",
"sort": "{ age: -1 }",
"limit": "10"
}
}
集約パイプラインレスポンス:
{
"aggregation": {
"pipeline": "[{ $match: { status: 'active' } }, { $group: { _id: '$category', total: { $sum: '$amount' } } }]"
}
}
ベストプラクティス
クエリの品質
- 正確なクエリを生成する - ユーザーの要件に合致するクエリを構築し、その後インデックスカバレッジをチェック:
- ユーザーのすべての要件を正しく満たすクエリを生成
- クエリ生成後、既存のインデックスがそれをサポートできるかチェック
- 適切なインデックスが存在しない場合、レスポンスでこのことを記載(ユーザーはインデックスの作成を検討する場合があります)
- インデックス使用を阻害するため、
$whereは決して使用しないでください - テキストインデックスなしで
$textを使用しないでください $exprは必要な場合のみ使用してください(控えめに使用)
- 冗長なオペレーターを避ける - 他の条件によってすでに暗示されているオペレーターを追加しないでください:
- 既に等号または不等号チェックがある場合、
$existsを追加しないでください(例:status: "active"またはage: { $gt: 25 }はそのフィールドが存在することを既に暗示しています) - 重複する範囲条件を追加しないでください(例:
$gte: 0と$gt: -1の両方を使用しない) - 各条件は既にカバーされていない意味のあるフィルタリングを追加する必要があります
- 既に等号または不等号チェックがある場合、
- 必要なフィールドのみを射影する - 射影でデータ転送を削減
_idフィールドが不要な場合、射影に_id: 0を追加
- フィールド名をスキーマに対して検証してから使用
- 適切なオペレーターを使用する - タスクに適した MongoDB オペレーターを選択:
$eq,$ne,$gt,$gte,$lt,$lteは比較用$in,$ninは複数の値のいずれかに一致させるため(複数の$eq/$ne条件を OR でつないだのと同等)$and,$or,$not,$norは論理演算用$regexは大文字小文字を区別するテキストパターンマッチング用(可能な限り左アンカー付きパターン/^prefix/を使用。インデックスを効率的に使用できます)$existsはフィールド存在チェック用(インデックスを活用するためにa: {$ne: null}をa: {$exists: true}より優先)$typeはタイプマッチング用
- 配列フィールドチェックを最適化 - 配列操作に効率的なパターンを使用:
- 配列が空でないかをチェック:
"arrayField.0": {$exists: true}をarrayField: {$exists: true, $type: "array", $ne: []}より使用 - 最初の要素の存在をチェックする方が、存在、タイプ、不等号チェックを組み合わせるより単純、読みやすく、効率的です
- 配列要素を複数の条件で一致させる場合、
$elemMatchを使用 - 配列長チェックの場合、正確なカウントが必要な場合は
$sizeを使用
- 配列が空でないかをチェック:
集約パイプラインの品質
- フィルターを早期に - ドキュメント数を削減するため、可能な限り早く
$matchを使用 - 最後に射影 - 返されるドキュメントをクライアントに正しく形成するため、最後に
$projectを使用 - 可能な限り制限 - 適切な場合、
$sortの後に$limitを追加 - インデックスを使用 -
$matchと$sortステージがインデックスを使用できることを確認:- パイプラインの開始に
$matchステージを配置 - 最初の
$matchと$sortステージはドキュメントを変更する任意のステージの前にあればインデックスを使用できます $matchフィルター生成後、インデックスがそれをサポートできるかチェック- 最初の
$matchの前にドキュメントを変換するステージを最小化
- パイプラインの開始に
$lookupを最適化 - 頻繁に結合されるデータの場合、非正規化を検討
エラー防止
- すべてのフィールド参照をスキーマに対して検証
- フィールド名を正しく引用 - ネストされたフィールドにはドット記法を使用
- 正規表現で特殊文字をエスケープ
- データ型をチェック - フィールド値がスキーマのフィールドタイプと一致することを確認
- 地理空間座標 - MongoDB の GeoJSON 形式では経度が先で、その後緯度です(例:
[longitude, latitude]または{type: "Point", coordinates: [lng, lat]})。これは平文で座標を書く方法と逆なので、地理クエリを生成する場合は二重チェックしてください。
スキーマ分析
サンプルドキュメントが提供された場合、以下を分析してください:
- フィールドタイプ - String、Number、Boolean、Date、ObjectId、Array、Object
- フィールドパターン - 必須フィールドと任意フィールド(複数のサンプルをチェック)
- ネストされた構造 - オブジェクト内のオブジェクト、オブジェクトの配列
- 配列要素 - 同一型配列と異種配列
- 特殊なタイプ - Dates、ObjectIds、Binary data、GeoJSON
サンプルドキュメントの使用法
サンプルドキュメントを以下に使用:
- 実際のデータ値と範囲を理解
- フィールド命名規則(camelCase、snake_case など)を特定
- 一般的なパターンを検出(例:ステータス列挙型、カテゴリ値)
- グループ化操作のカーディナリティを推定
- あなたのクエリが実データで動作することを検証
エラーハンドリング
クエリを生成できない場合:
- 理由を説明 - スキーム不足、曖昧なリクエスト、不可能なクエリ
- 明確化をリクエスト - 要件の詳細を追加で提供してもらう
- 代替案を提案 - 利用可能な場合は別のアプローチを提案
- 例を提供 - 動作可能な同様のクエリを示す
例なワークフロー
ユーザー入力: 「25 歳以上のすべてのアクティブユーザーを検索し、登録日でソート」
あなたのプロセス:
- スキーマのフィールドをチェック:
status、age、registrationDateまたは同様のもの - フィールドタイプがクエリ要件に合致することを検証
- ユーザー要件に基づいてクエリを生成
- 利用可能なインデックスがクエリをサポートできるかチェック
- クエリフィルターに適切なインデックスがない場合、インデックス作成を提案
生成されたクエリ:
{
"query": {
"filter": "{ status: 'active', age: { $gt: 25 } }",
"sort": "{ registrationDate: -1 }"
}
}
コンテキストサイズの管理
大規模または多数のサンプルドキュメントをフェッチするとコンテキストが無駄になり、クエリ品質が低下する可能性があります。
スキーマ幅に基づいてサンプルカウントを調整:
- 30 フィールド未満:
limit: 4(デフォルト) - 30~80 フィールド:
limit: 2 - 80~150 フィールド:
limit: 1 - 150 フィールド以上:
limit: 1とユーザーのクエリに関連するフィールドのみの射影
大きな配列フィールドと文字列をプレビュー:
- スキーマドキュメントに配列が含まれている場合、サンプル射影で
$slice: 3を使用して配列サイズを制限。文字列フィールドを 100 文字に制限して$substrをサンプル射影で使用し、過度に長い値がコンテキストを消費することを防いでください。
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mongodb
- リポジトリ
- mongodb/agent-skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mongodb/agent-skills / ライセンス: Apache-2.0
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。