MongoDB のデータでGoogle Sheets を拡張
マクロ、カスタム関数、アドオンを使用してGoogle スプレッドシートからMongoDB のデータとやり取りします。CData API Server は、ADO.NET Provider for MongoDB(またはその他の250+ ADO.NET Providers)と組み合わせることで、Google Sheets のようなクラウドベースのモバイルアプリケーションからMongoDB のデータに接続できるようになります。API Server は、MongoDB およびCData ADO.NET Providers にサポートされるすべてのソースのOData サービスを生成する軽量のWeb アプリケーションです。
Google Apps Script(GAS)は、これらのOData サービスをJSON 形式で利用できます。この記事では、Google スプレッドシートにrestaurants データを取り込み、変更を加えたときにMongoDB のデータの更新を実行するシンプルなアドオンを作成する方法を説明します。
MongoDB データ連携について
CData を使用すれば、MongoDB のライブデータへのアクセスと統合がこれまでになく簡単になります。お客様は CData の接続機能を以下の目的で利用しています:
- MongoDB 2.6 以降のデータにアクセスでき、さまざまな MongoDB バージョンで幅広く使用できます。
- 柔軟な NoSQL により、非構造化データを簡単に管理できます(詳細はこちら:NoSQL 統合のための最先端ドライバー)。
- 他の NoSQL ドライバーに対する機能的な優位性を活用し、MongoDB データを扱う際の機能的なメリットを実現できます(詳細はこちら:NoSQL 向けドライバーの機能比較)。
MongoDB の柔軟性により、トランザクション、オペレーション、または分析データベースとして使用できます。つまり、CData のお客様は、ビジネスデータを MongoDB に統合したり、MongoDB データをデータウェアハウスに統合したり(またはその両方)するために当社のソリューションを使用しています。また、Power BI や Tableau などのお気に入りのツールから MongoDB を直接分析・レポートするために、当社のライブ接続オプションを活用しているお客様もいます。
MongoDB のユースケースと CData が MongoDB 体験をどのように向上させるかについての詳細は、ブログ記事をご覧ください:The Top 10 Real-World MongoDB Use Cases You Should Know in 2024
はじめに
API Server の設定
以下のリンクからAPI Server の無償トライアルをスタートしたら、セキュアなMongoDB OData サービスを作成していきましょう。
MongoDB への接続
GAS からMongoDB のデータを操作するには、まずMongoDB への接続を作成・設定します。
- API Server にログインして、「Connections」をクリック、さらに「接続を追加」をクリックします。
- 「接続を追加」をクリックして、データソースがAPI Server に事前にインストールされている場合は、一覧から「MongoDB」を選択します。
- 事前にインストールされていない場合は、コネクタを追加していきます。コネクタ追加の手順は以下の記事にまとめてありますので、ご確認ください。
CData コネクタの追加方法はこちら >> - それでは、MongoDB への接続設定を行っていきましょう!
-
MongoDB への接続には、Server、Database、User、Password プロパティを設定します。MongoDB コレクションにテーブルとしてアクセスするには、自動スキーマ検出を使用することができます。もちろんスキーマ定義の.rsd ファイルを編集して自分でスキーマ定義を書くことも可能です。スキーマに縛られないフリーフォーマットクエリを投げることもできます。
- 接続情報の入力が完了したら、「保存およびテスト」をクリックします。
MongoDB への接続には、Server、Database、User、Password プロパティを設定します。MongoDB コレクションにテーブルとしてアクセスするには、自動スキーマ検出を使用することができます。もちろんスキーマ定義の.rsd ファイルを編集して自分でスキーマ定義を書くことも可能です。スキーマに縛られないフリーフォーマットクエリを投げることもできます。
API Server のユーザー設定
次に、API Server 経由でMongoDB にアクセスするユーザーを作成します。「Users」ページでユーザーを追加・設定できます。やってみましょう。
- 「Users」ページで ユーザーを追加をクリックすると、「ユーザーを追加」ポップアップが開きます。
-
次に、「ロール」、「ユーザー名」、「権限」プロパティを設定し、「ユーザーを追加」をクリックします。
-
その後、ユーザーの認証トークンが生成されます。各ユーザーの認証トークンとその他の情報は「Users」ページで確認できます。
MongoDB 用のAPI エンドポイントの作成
ユーザーを作成したら、MongoDB のデータ用のAPI エンドポイントを作成していきます。
-
まず、「API」ページに移動し、
「 テーブルを追加」をクリックします。
-
アクセスしたい接続を選択し、次へをクリックします。
-
接続を選択した状態で、各テーブルを選択して確認をクリックすることでエンドポイントを作成します。
OData のエンドポイントを取得
以上でMongoDB への接続を設定してユーザーを作成し、API Server でMongoDB データのAPI を追加しました。これで、OData 形式のMongoDB データをREST API で利用できます。API Server の「API」ページから、API のエンドポイントを表示およびコピーできます。
MongoDB のデータを取得する
「Tools」->「Script Editor」とクリックして、スプレッドシートからScript Editor を開きます。Script Editor で次の機能を追加し、スプレッドシートにOData クエリの結果を入力します。
function retrieve(){
var url = "https://MyUrl/api.rsc/restaurants?select=_id,borough,cuisine,Name";
var response = UrlFetchApp.fetch(url,{
headers: {"Authorization":"Basic " + Utilities.base64Encode("MyUser:MyAuthtoken")}
});
var json = response.getContentText();
var sheet = SpreadsheetApp.getActiveSheet();
var a1 = sheet.getRange('a1');
var index=1;
var restaurants = JSON.parse(json).value;
var cols = [["_id","borough","cuisine","Name"]];
sheet.getRange(1,1,1,4).setValues(cols);
row=2;
for(var i in restaurants){
for (var j in restaurants[i]) {
switch (j) {
case "_id":
a1.offset(row,0).setValue(account[i][j]);
break;
case "borough":
a1.offset(row,1).setValue(account[i][j]);
break;
case "cuisine":
a1.offset(row,2).setValue(account[i][j]);
break;
case "Name":
a1.offset(row,3).setValue(account[i][j]);
break;
}
}
row++;
}
}
次のステップに従って、開いたタイミングでスプレッドシートに入力するインストール可能なトリガーを追加します。
- 「Resources」->「Current Project's Triggers」->「Add a New Trigger」とクリックします。
- 「Run」メニューで「retrieve」を選択します。
- 「From Spreadsheet」を選択します。
- 「On open」を選択します。
ダイアログを閉じると、アプリケーションへのアクセスを許可するように要求されます。
MongoDB のデータへの変更を追加する
以下の関数を追加し、セルへの変更をAPI Server に追加します。
function buildReq(e){
var sheet = SpreadsheetApp.getActiveSheet();
var changes = e.range;
var id = sheet.getRange(changes.getRow(),1).getValue();
var col = sheet.getRange(1,changes.getColumn()).getValue();
var url = "http://MyServer/api.rsc/restaurants("+id+")";
var putdata = "{\"@odata.type\" : \"CDataAPI.restaurants\", \""+col+"\": \""+changes.getValue()+"\"}";;
UrlFetchApp.fetch(url,{
method: "put",
contentType: "application/json",
payload: putdata,
headers: {"Authorization":"Basic " + Utilities.base64Encode("MyUser:MyAuthtoken")}
});
}
下記の手順に従って、アップデートトリガーを追加します。
- 「Resources」->「Current Project's Triggers」とクリックします。
- 「Run」メニューで「buildReqe」を選択します。
- 「From Spreadsheet」を選択します。
- 「On edit」を選択します。
「Publish」->「Test as Add-On」とクリックすることで、スクリプトを確認できます。バージョン、インストールタイプ、およびスプレッドシートを選択し、テストの構成を作成します。作成したら、選択して実行できます。
セルを変更すると、API Server はMongoDB のデータのアップデートを実行します。