MongoDB のデータベースに接続する - C#
C#でMongoDB のデータベースに接続するコードを紹介します。
事前準備
MongoDBのインストールと設定
MongoDBをインストールし外部からアクセスできる状態にします。MongoDBのインストール手順は
こちらの記事を、MongoDBに外部からアクセスできるようにするための設定は
こちらの記事を参照してください。
MongoDBのデータベースとコレクションの作成
今回、動作を確認するためにあらかじめMongoDBにデータベースとコレクションを作成し、ドキュメントを挿入しておきます。MongoDBのデータベース作成手順は
こちらの記事を参照してください。コレクションへのドキュメントの挿入は
こちらの記事を参照してください。
挿入するドキュメントの構造は下記になります。
カラム名 | 型名 |
_id | ObjectId |
name | String |
price | String |
stocks | String |
挿入するドキュメントの値は下記になります。
_id | name | price | stocks |
5c3195b7b39c78097028a60a | Penguin Cookie | 230 | 8 |
5c319625b39c78097028a60b | Camel Cake | 520 | 4 |
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);
接続文字列は以下のフォーマットになります。
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を愛用