MongoDB Data API
1. MongoDB Data API とは
MongoDB Data API を使用すると、言語固有のドライバーをインストールすることなく、MongoDB データベースのデータをクエリまたは更新できます。
通常、アプリケーション開発では言語ごとのドライバーを使用することが推奨されますが、ドライバーが利用できない環境や、小規模なアプリケーションでドライバーの導入がオーバーヘッドになる場合には、この Data API が非常に便利です。
2. Data API による読み取りと書き込み
MongoDB Data API は、あらかじめ設定された一連の HTTPS エンドポイント です。これを使用して、MongoDB Atlas データベースに対するデータの読み取りや書き込みを行います。
Data API を介して、ドキュメントの作成(Create)、読み取り(Read)、更新(Update)、削除(Delete)、さらにはアグリゲーション(集計)といった操作をすべて実行可能です。
3. クラスターの設定
Data API を使用するには、まず Atlas の管理画面(UI)から機能を有効にする必要があります。
- MongoDB Atlas のダッシュボードで、左メニューの 「Data API」 に移動します。
- API を有効にしたいデータソースを選択し、「Enable the Data API」 をクリックします。
3.1 アクセスレベルの設定
デフォルトではアクセス権は付与されていません。Data API に付与するアクセスレベルを以下から選択します。
- No Access(アクセスなし)
- Read Only(読み取り専用)
- Read and Write(読み取りおよび書き込み)
- Custom Access(カスタムアクセス)
3.2 Data API キーの作成
Data API で認証を行うために、API キーを作成する必要があります。
- 「Create API Key」 をクリックし、キーの名前を入力して 「Generate API Key」 をクリックします。
- 表示された API キーをコピーし、安全な場所に保存してください。このキーを再度確認することはできません。
4. Data API リクエストの送信
設定が完了したら、Data API を使用してデータベースにリクエストを送信できます。
以下の例では、curl を使用して sample_mflix データベース(「アグリゲーション入門」セクションでロードしたもの)の movies コレクションから最初のドキュメントを検索します。
この例を実行するには、App ID、API キー、クラスター名が必要です。App ID は、MongoDB Atlas UI の Data API ページにある「URL Endpoint」フィールドから確認できます。
4.1 リクエスト例 (curl)
curl --location --request POST 'https://data.mongodb-api.com/app/<DATA_API_APP_ID>/endpoint/data/v1/action/findOne' \
--header 'Content-Type: application/json' \
--header 'Access-Control-Request-Headers: *' \
--header 'api-key: <DATA_API_KEY>' \
--data-raw '{
"dataSource":"<クラスター名>",
"database":"sample_mflix",
"collection":"movies",
"projection": {"title": 1}}'5. Data API エンドポイント一覧
前述の例では、URL に findOne エンドポイントを使用しました。Data API では、目的に応じて複数のエンドポイントが提供されています。
すべてのエンドポイントのベース URL は以下の通りです:
https://data.mongodb-api.com/app/<Data API App ID>/endpoint/data/v1/action/5.1 単一ドキュメントの検索 (findOne)
- エンドポイント:
POST Base_URL/findOne - 用途: コレクション内から単一のドキュメントを検索します。
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"filter": { "クエリフィルタ" },
"projection": { "プロジェクション" }
}5.2 複数ドキュメントの検索 (find)
- エンドポイント:
POST Base_URL/find - 用途: コレクション内の複数のドキュメントを検索します。
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"filter": { "クエリフィルタ" },
"projection": { "プロジェクション" },
"sort": { "ソート式" },
"limit": 10,
"skip": 0
}5.3 単一ドキュメントの挿入 (insertOne)
- エンドポイント:
POST Base_URL/insertOne - 用途: コレクションに単一のドキュメントを挿入します。
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"document": { "ドキュメント内容" }
}5.4 複数ドキュメントの挿入 (insertMany)
- エンドポイント:
POST Base_URL/insertMany - 用途: コレクションに複数のドキュメントを一括挿入します。
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"documents": [{ "ドキュメント1" }, { "ドキュメント2" }, ...]
}5.5 単一ドキュメントの更新 (updateOne)
- エンドポイント:
POST Base_URL/updateOne
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"filter": { "クエリフィルタ" },
"update": { "更新式" },
"upsert": false
}5.6 複数ドキュメントの更新 (updateMany)
- エンドポイント:
POST Base_URL/updateMany
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"filter": { "クエリフィルタ" },
"update": { "更新式" },
"upsert": false
}5.7 単一ドキュメントの削除 (deleteOne)
- エンドポイント:
POST Base_URL/deleteOne
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"filter": { "クエリフィルタ" }
}5.8 複数ドキュメントの削除 (deleteMany)
- エンドポイント:
POST Base_URL/deleteMany
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"filter": { "クエリフィルタ" }
}5.9 ドキュメントのアグリゲーション (aggregate)
- エンドポイント:
POST Base_URL/aggregate - 用途: 複雑な集計パイプラインを実行します。
リクエストボディの例:
{
"dataSource": "<データソース名>",
"database": "<データベース名>",
"collection": "<コレクション名>",
"pipeline": [{ "パイプライン式" }, ...]
}