Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

CData MongoDB Driverを使ってドキュメント指向NoSQLであるMongoDBをRDBライクに扱う方法

本日も、またまたMongoDBです。今回は前回使用したCData MongoDB Driverの内部的なお話。

MongoDBのようなドキュメント指向NoSQLは、アプリケーションからプログラムライクに扱う時にはスムーズにアプローチできますが、最終的に分析したい、BIツールなどで咀嚼したい、といった時にはこのスキーマレスな階層構造が邪魔をしてしまいます。

そこを、前回の記事ではCData MongoDB JDBC Driverを挟むことで、RDBライクにアクセスし、BIツールで使いやすいフラットな状態にした上で扱いました。

kageura.hatenadiary.jp

www.cdata.com

今回は、CData Driverがどのようにドキュメント指向NoSQLをRDBライクに扱っているのか、どんなアプローチでMongoDBのデータを解釈可能なのかを見ていきたいと思います。

詳しくは、ヘルプにも掲載している内容ですので、併せて見てもらえるといいのかなと思います。

cdn.cdata.com

続きを読む

MongoDBのドキュメント指向NoSQLデータをCData JDBC Driver経由でYellowfinを使い可視化してみる

何回かに分けてMongoDBに触れてきたのですが、今回はBIツールからMongoDBと戯れてみたいと思います。

kageura.hatenadiary.jp

kageura.hatenadiary.jp

今回BIツールはYellowfinを利用しました。

Yellowfinは自社サーバーインストールタイプのWebベースBIツールです。

yellowfin.co.jp

最終的には、以下のようなOpenWeatherMapのAPIから取り込んだMongoDBの天気情報ドキュメントをフラットなRDBに変換し、

http://openweathermap.org/

f:id:sugimomoto:20180114123919p:plain

降雪情報や湿度の推移をビジュアライズしてみたいと思います。

f:id:sugimomoto:20180114123926p:plain

続きを読む

MongoDBのImport・Exportコマンドを試す

OpenWeatherMapで提供されているAPIJsonをMongoDBに取り込みたいなぁと思い、勉強がてら手軽に試せるMongoImoport・Exportを使ってやってみました。

OpenWeatherMapは、APIで天気情報を提供しているサービスです。

openweathermap.org

使ったAPIは[5 day weather forecast]

http://openweathermap.org/forecast5#cityid5

CityIdで東京を指定した、以下のようなURLでJsonを取得します。appidはSignupするとFreeプランのものが取得できます。

http://samples.openweathermap.org/data/2.5/forecast?id=1850147&appid=XXXXXXXXXXXXXXXXXXXXX

ほしいのはヘッダーを除外した、listプロパティの以下の部分。

f:id:sugimomoto:20180114115227p:plain

あと、このままだとオブジェクト末尾の[,]が邪魔なのでそれを、置換で調整しました。整形済みのファイルは以下のGoogle Driveにアップしています。よかったらどうぞ。

https://drive.google.com/open?id=1G3SjUFw_Nb42sESf1Lrq0tbJnzGhcjXr

インポートコマンド

ドキュメントはこちら。

mongoimport — MongoDB Manual 3.6

ローカルのMongoDBに渡すのであれば、そんなに難しいものは無いです。[--db]で対象のDB [--collection]で作成するコレクション、[--file]で対象のjsonを指定します。

mongoimport --db test --collection tokyo-weather --drop --file forecast.json

f:id:sugimomoto:20180114115253p:plain

f:id:sugimomoto:20180114115257p:plain

あと、はじめMongoShellにログインして実行するのかと思ったら、exeとして提供されていました。

f:id:sugimomoto:20180114115305p:plain

なので、環境変数でPathを通していれば、上記コマンドで実行可能です。

エクスポートコマンド

Exportもわかりやすい

mongoexport — MongoDB Manual 3.6

mongoexport --db test --collection tokyo-weather --out tokyo-weather.json

一度MongoDBで生成されているので、自動生成IDが付与されていますね。

f:id:sugimomoto:20180114115328p:plain

なぜポストREST APIが求められるのか? REST APIがカバーできない2つの要因とその対策

なんだか珍しく、あおり気味のタイトルにしてしまいました。

最近読んだ以下の記事が大変おもしろかったので、今まで私の中で度々反芻していたものを文章としてまとめてみました。

gihyo.jp

なぜ今GraphQLが騒がれているのか。ポストRESTが求められている理由、なぜポストRESTが求められなければいけないのか? ポストRESTの登場によって私たちにとって何が嬉しくなるのか? そのあたりを色々と触れていきたいと思います。

続きを読む

Windows版MongoDBのインストール・MongoShellを通してCRUDコマンドを打ってみる

というわけで前回に引き続き、MongoDBのインストールと、一通りのCRUD操作をMongoShellから打ってみたいと思います。

インストールしたのは、MongoDB 3.6.1のWindows版です。

下の公式マニュアルを参考にすれば、そこまで難しくなくインストールすることができます。

Install MongoDB Community Edition on Windows — MongoDB Manual 3.6

続きを読む

MongoDB事始め。個人的まとめ

去年から触っているMongoDBですが、

あまりまとめる時間が無かったので、冬休みの娯楽として色々とまとめてみました。

Mongo DBって?

ドキュメント指向NoSQLデータベース一つです。

www.mongodb.com

MongoDBではリレーショナルデータベースとは違い、以下のようなJSON(正しくはBSON)形式のデータを格納して扱うことができるデータベースです。

IDが振られたデータをRDBで言うところのレコード(MongoDBではドキュメントと呼ぶ)でBSONを管理し、この単位で基本的な操作を実行します。

{ "_id" : ObjectId("5a4c7c92b3312b72b4d719f7"), "name" : "kazuya", "age" : 30 }
{ "_id" : ObjectId("5a4c7ccbb3312b72b4d719f8"), "name" : "hitomi", "loves" : [ "banana", "strawberry" ] }
{ "_id" : ObjectId("5a4c7cd6b3312b72b4d719f9"), "name" : "yuta", "loves" : [ "apple", "strawberry" ] }

はじめに型を定義する必要は無く、JSONの形式に則って、スキーマレスにデータのCRUD操作を行うことができます。

なので、上記ドキュメントを見ると、一つ目のドキュメントで、lovesのフィールドが存在しないことがわかるかと思います。

このように途中のドキュメントからスキーマ構造を変えたり、オブジェクトを追加して階層構造を深くしたり、ということも柔軟に実施することが可能です。

続きを読む

Azure Functions でKintoneに登録された情報を元に、Twitter自動投稿するBotを作ってみた

冬休みを利用して、Azure Functionsを利用したTwitter 自動投稿Bot を作っていました。

f:id:sugimomoto:20180101185230p:plain

本当はAzure FunctionsのTimer Triggerでもよかったんですが

後々外部から叩くこともあるかなぁっていうのと、Azure FunctionsだけにTimerの依存を増やすのもいやだなぁというので、Azure Schedulerで実行する方式にしました。

どんな感じに動くの?

Kintoneには以下のようにツイートするデータを管理するアプリを作っています。

あと、二重投稿防止と、ツイートが偏らないようにするための最終投稿日のフィールドを持たせています。

f:id:sugimomoto:20180101185240p:plain

これを元に、私のタイムラインへ以下のように投稿されます。

f:id:sugimomoto:20180101185246p:plain

続きを読む