都内で働くSEの技術的なひとりごと

都内でサラリーマンやってます。マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。よろしくお願いします♪

Mongo プロトコルサポートの DocumentDB をお試してみる

 Azure の DocumentDB が Mongo プロトコルをサポートしているのを今更知りました。( 情弱.. ) 過去に自分の中で MongoDB ブームがあり、少しだけ触れてました。
ryuchan.hatenablog.com
ryuchan.hatenablog.com

 DocumentDB についても記事書いていましたね。完全に記憶からなくなってました。
ryuchan.hatenablog.com

 早速、試してみましょう。最近、Azure 自体あまり使ってませんでした。( 業務で使わないと、どうしても疎遠になりがち... ) Azure 上で Mongo 互換の DocumentDB を作成しました。
f:id:koogucc11:20160925231502p:plain

 MongoDB のドライバはここです。NuGet しましょう。

  • MongoDB.Driver: The new driver. It is mostly free of any legacy code and should be used for all new projects. More documentation can be found in the reference guide.
  • MongoDB.Driver.Core: The core of the driver and a dependency of MongoDB.Driver. You will probably not use this package directly. More documentation can be found in the reference guide.
  • MongoDB.Bson: The BSON layer. It is a dependency of MongoDB.Driver.Core. It may be used by itself. More documentation can be found in the reference guide.
  • mongocsharpdriver: The compatibility layer for those upgrading from our 1.x series. This should not be used for new projects. More information can be found in the 1.x documentation;

 はるか昔の記事で、下記のようなコードを書いていました。今回は下記のソースを MongoDB プロトコルをサポートしている Azure DocumentDB で実行させたいと思います。

    //前回のソースそのまま。            
    var monc = new MongoClient();
    //前回のソースそのまま。
    var mons = monc.GetServer();
    //データベースの取得
    var db = mons.GetDatabase("Chart");

    //Chartのドキュメントタイプを取得する。
    var chart = db.GetCollection<BsonDocument>("Chart");
    //BsonDocumentクラスを使用して、JSON形式で格納するデータ作成する。
    var chartdocument = new BsonDocument {
                { "PatientID", "1" },
                { "DocumentNo", "D0001" },
                { "DocumentContents", "頭が痛い。"}};
    //データをInsertする。
    chart.Insert(chartdocument);

 SQL Database などと同様に接続文字列を使用します。接続文字列の情報は下記の通りです。
f:id:koogucc11:20160926110954p:plain

 接続文字列を使用するため、MongoClient クラスの使い方を変える必要があります。
MongoClient Constructor

 接続文字列を直接渡したいので、下記のコンストラクタを使用してみましょう。

public MongoClient(
string connectionString
)

 GetServer は非推奨になってるので、使用しないほうがいいですね。
MongoClientExtensions.GetServer Method

[ObsoleteAttribute("Use the new API instead.")]
public static MongoServer GetServer(
this MongoClient client
)

 あと、IMongoCollection の insert メソッドはなくってますね。代替メソッドとして、下記のメソッドに追加されています。
IMongoCollection(TDocument).InsertOne Method
IMongoCollection(TDocument).InsertOneAsync Method (TDocument, CancellationToken)
IMongoCollection(TDocument).InsertMany Method
IMongoCollection(TDocument).InsertManyAsync Method

 これらの結果を踏まえて、下記の通りにコードを作成しました。昨日インストールした Visual Studio で実行してみます。

    //接続文字列を設定
    var connectionString = "mongodb://...[略]...documents.azure.com:10250/?ssl=true";

    //接続文字列を指定            
    var monc = new MongoClient(connectionString);
            
    //データベースの取得
    var db = monc.GetDatabase("Chart");

    //Chartのドキュメントタイプを取得する。
    var chart = db.GetCollection<BsonDocument>("Chart");
    //BsonDocumentクラスを使用して、JSON形式で格納するデータ作成する。
    var chartdocument = new BsonDocument {
                                             { "PatientID", "1" },
                                             { "DocumentNo", "D0001" },
                                             { "DocumentContents", "頭が痛い。"}
                                         };
    //データを一件追加する。 
    chart.InsertOne(chartdocument);

 DocumentDB の見方がわからないので、よくわかりませんがコレクションが 0 → 1 に変化したので何か更新されたのでしょうwww 
f:id:koogucc11:20160926112931p:plain

 NoSQL は楽しいですね。しかし、DocumentDB に格納したデータはどうやって確認したらいいんでしょうか? ( Azure ポータル上からは参照できなさそうです。 ) 面白そうなので、ちょっと調べてみよう。
※可能でした。クエリエクスプローラーから参照できます。(from BEACHSIDE (id:beachside)さん)
beachside.hatenablog.com
f:id:koogucc11:20160927110706p:plain

 さて、Ignite 見ましょうかね。
ryuchan.hatenablog.com

 書籍いっぱいありますね。うらやましい。

RDB技術者のためのNoSQLガイド

RDB技術者のためのNoSQLガイド

MongoDBイン・アクション

MongoDBイン・アクション

はじめてのMongoDB (I・O BOOKS)

はじめてのMongoDB (I・O BOOKS)

NOSQLの基礎知識

NOSQLの基礎知識

シングルページWebアプリケーション ―Node.js、MongoDBを活用したJavaScript SPA

シングルページWebアプリケーション ―Node.js、MongoDBを活用したJavaScript SPA