MongoDB 速習チュートリアル

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)から機能を有効にする必要があります。

  1. MongoDB Atlas のダッシュボードで、左メニューの 「Data API」 に移動します。
  2. 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 キーを作成する必要があります。

  1. 「Create API Key」 をクリックし、キーの名前を入力して 「Generate API Key」 をクリックします。
  2. 表示された API キーをコピーし、安全な場所に保存してください。このキーを再度確認することはできません。

4. Data API リクエストの送信

設定が完了したら、Data API を使用してデータベースにリクエストを送信できます。

以下の例では、curl を使用して sample_mflix データベース(「アグリゲーション入門」セクションでロードしたもの)の movies コレクションから最初のドキュメントを検索します。

この例を実行するには、App IDAPI キークラスター名が必要です。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": [{ "パイプライン式" }, ...]
}