MongoDB のデータベースに接続する - C#

C#でMongoDB のデータベースに接続するコードを紹介します。

事前準備

MongoDBのインストールと設定

MongoDBをインストールし外部からアクセスできる状態にします。MongoDBのインストール手順はこちらの記事を、MongoDBに外部からアクセスできるようにするための設定はこちらの記事を参照してください。

MongoDBのデータベースとコレクションの作成

今回、動作を確認するためにあらかじめMongoDBにデータベースとコレクションを作成し、ドキュメントを挿入しておきます。MongoDBのデータベース作成手順はこちらの記事を参照してください。コレクションへのドキュメントの挿入はこちらの記事を参照してください。
挿入するドキュメントの構造は下記になります。
カラム名型名
_idObjectId
nameString
priceString
stocksString

挿入するドキュメントの値は下記になります。
_idnamepricestocks
5c3195b7b39c78097028a60aPenguin Cookie2308
5c319625b39c78097028a60bCamel Cake5204

MongoDBドライバーの導入

Visual Studioを起動し、Widnows Formアプリケーションを新規作成します。


Visual Studioの[ツール]メニューの[NuGet パッケージマネージャー]のサブメニューの[パッケージ マネージャー コンソール]をクリックします。


メインウィンドウの下のエリアに[パッケージ マネージャー コンソール]のウィンドウが表示されます。

下記のコマンドを実行して MongoDB のドライバーをダウンロードしてインストールします。
Install-Package MongoDB.Driver

コマンドを実行すると依存関係の情報収集が行われ、ダウンロードとインストールが実行されます。

インストールが完了すると下図の表示となり、コマンド入力待ち状態になります。

UI

下図のUIを作成します。複数行のテキストボックスとボタンを1つずつ配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;

namespace SimpleDBConnect
{
  public partial class FormMain : Form
  {
    public class MyCollectionModel
    {
      public ObjectId Id { get; set; }

      [BsonElement("name")]
      public string ItemName { get; set; }

      [BsonElement("price")]
      public string ItemPrice { get; set; }

      [BsonElement("stocks")]
      public string ItemStocks { get; set; }
    }

    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string connectionString = "mongodb://192.168.0.1";
      MongoClient client = new MongoClient(connectionString);

      IMongoDatabase db = client.GetDatabase("Test");
      IMongoCollection<MyCollectionModel> collection = db.GetCollection<MyCollectionModel>("MyCollection");

      List<MyCollectionModel> list = collection.Find(a=>true).ToList();

      for (int i = 0; i < list.Count; i++) {
        textBox1.Text += list[i].Id + " , " + list[i].ItemName +" , "+list[i].ItemPrice + ", " + list[i].ItemStocks + "\r\n"; 
      }
    }
  }
}

解説

下記のusing節を記述してMongoDBのライブラリを参照します。
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;

下記のコードでは、コレクションのドキュメントの構造をクラスで定義しています。ドキュメントのカラム名をBsonElement属性に記述します。
public class MyCollectionModel
{
  public ObjectId Id { get; set; }

  [BsonElement("name")]
  public string ItemName { get; set; }

  [BsonElement("price")]
  public string ItemPrice { get; set; }

  [BsonElement("stocks")]
  public string ItemStocks { get; set; }
}
ボタンのクリックにより、下記のコードを実行します。
接続文字列を準備しMongoClient オブジェクトを作成します。
  string connectionString = "mongodb://192.168.0.1";
  MongoClient client = new MongoClient(connectionString);
接続文字列は以下のフォーマットになります。
mongodb://(ホスト名)
mongodb://(IPアドレス)

MongoClientオブジェクトのGetDatabaseメソッドを呼び出し、MongoDBのデータベースオブジェクトIMongoDatabaseを取得します。取得したデータベースオブジェクトのGetCollectionメソッドを呼び出しMongoDBのコレクションオブジェクトIMongoCollectionを取得します。GetCollectionメソッドやIMongoCollectionオブジェクトの型指定にはドキュメントクラスの構造を定義したMyCollectionModelクラスを指定します。
 IMongoDatabase db = client.GetDatabase("Test");
 IMongoCollection<MyCollectionModel> collection = db.GetCollection<MyCollectionModel>("MyCollection");

IMongoCollectionオブジェクトのFindメソッドを呼び出し条件に一致するドキュメントを取得します。今回はすべてのドキュメントを取得するため、常にtrueとなるデリゲート、あるいはラムダ式を与えます。戻り値の型はIFindFluentになります。IFindFluentのToListメソッドを呼び出すことで、List<MyCollectionModel> に変換できます。
  List<MyCollectionModel> list = collection.Find(a=>true).ToList();

下記の記述でも同様の動作になります。
  List<MyCollectionModel> list = collection.Find(new BsonDocument()).ToList();

forループでテキストボックスにリストの内容を表示します。MongoDBのデータベースに挿入されたドキュメントの値はMyCollectionModelクラスのメンバ変数に格納されています。
  for (int i = 0; i < list.Count; i++) {
    textBox1.Text += list[i].Id + " , " + list[i].ItemName +" , "+list[i].ItemPrice + ", " + list[i].ItemStocks + "\r\n"; 
  }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。テキストボックスにMongoDBに挿入したドキュメントの値が表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2019-01-07
iPentec all rights reserverd.