MongoDB には .NET 用のC#ドライバが提供されています。今回や C# を使用して MongoDB にアクセスする簡単なサンプルプログラムを作成してみたので覚書としてメモを記載します。

検証に使用した MongoDB のバージョンは 2.6.1 です。

公式に提供されている .NET の Mongo DB 用ドライバーを使用したプログラムの詳細については下記URLが参考になります。

C# Driver Tutorial
http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#csharp-driver-tutorial
C# and .NET MongoDB Driver
http://docs.mongodb.org/ecosystem/drivers/csharp/

1. MongoDB の C# ドライバを準備

Visual Studio を起動してコンソールプロジェクトを作成してください。作成したプロジェクトに C#ドライバーをセットアップします。

Visual Studio から NuGet パッケージ管理を起動して、 管理画面でオンラインを選択後、 MongoDB で検索すると Official MongoDB C# driver が見つかるので、 インストールボタンをクリックします。

NuGet パッケージコンマネージャーコンソールを起動して、コンソールからインストールすることもできます。その場合は下図のように Install-Pacakge mongocsharpdriver と入力してパッケージをインストールします。

必要なドライバー(dll)がインストールされると プロジェクトの 参照設定に下図のように MongoDB.Bson, MongoDB.Driver が追加されます。

C#ようの.NETドライバーは https://github.com/mongodb/mongo-csharp-driver/releases から msi ファイルをダウンロードしてインストールできるみたいですが、 NuGetの方が簡単だと思います。

2.サンプルプログラムの作成

必要なdllの参照ができたので、サンプルプログラムを作成します。今回は下記のように Program.cs にシンプルな CRUDを行うプログラムを作成してみました。サンプルソースではArticleという型付の ドキュメントの作成/検索/更新/削除を行っています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SampleMongo
{
    using MongoDB.Bson;
    using MongoDB.Driver;
    using MongoDB.Driver.Builders;
    using MongoDB.Driver.GridFS;
    using MongoDB.Driver.Linq;

    class Program
    {
        /// <summary>
        /// MongoDBを使用してコレクションを作成して アイテムを挿入/検索/更新/削除を行ってみる
        /// Getting Started with the C# Driver をまねてサンプルソースを作成
        /// http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/#getting-started-with-csharp-driver 
        /// 
        /// Articleという型付のドキュメントクラスを使用していますが、MongoDBはスキーマを強制しないので型のないドキュメントも
        /// 当然扱えます。
        /// https://github.com/mongodb/mongo-csharp-driver
        /// のGetting Started の Untyped Documents を参照していただくと BsonDocument を使用した型指定のないドキュメントを使用する
        /// サンプルが掲載されています。
        /// ほとんどの場合は型付のほうが扱いやすいと思います。
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 接続
            string connectionString = "mongodb://localhost";
            MongoClient client = new MongoClient(connectionString);
            MongoServer server =  client.GetServer();

            // DBの参照を取得(存在しなくても必要に応じて自動的に作成される)
            MongoDatabase db= server.GetDatabase("mydb");
            MongoCollection collection = db.GetCollection<Article>("article");
            
            // ドキュメントの作成
            var doc = new Article
            {
                Title = "テストタイトル",
                Body = "テストボディ",
                Author = "Test Author",
                Keywords = new string[] { "Windows", "Linux", "C#" },
                ViewCount = 1,
                ReleaseDate = DateTime.Now.AddDays(1)
            };
            collection.Insert<Article>(doc);

            Console.WriteLine(doc.Id);

            // 検索
            IMongoQuery query = Query<Article>.EQ(x => x.Id, doc.Id);
            Article result = collection.FindOneAs<Article>(query);
            Console.WriteLine(result.Id);

            // ドキュメントの置き換え
            result.Title = "テストタイトル更新版";
            collection.Save<Article>(result);

            IMongoUpdate update =  Update<Article>.Set(x => x.Body, "新しいボディ").Inc(x => x.ViewCount, 1).Push(x => x.Keywords, "Mongo");
            collection.Update(query, update);

            // 削除する場合
            collection.Remove(query);

            Console.ReadLine();


        }
    }

    /// <summary>
    /// テスト用のドメインクラス
    /// </summary>
    public class Article
    {
        public ObjectId Id { get; set; }
        public string Title { get; set; }
        public string Body { get; set; }
        public string Author { get; set; }
        public string[] Keywords { get; set; }
        public int ViewCount { get; set; }
        public DateTime ReleaseDate { get; set; }
    }
}

サンプルプログラムを実行後、 Mongoのクライアントシェルを使用して確認すると  mydb とう DBが作成され、 article コレクションにレコードが作成されていることが確認できます。

3.まとめ

説明は以上です。MongoDBの.NET ドライバーはMongoDBのコマンドを知っていればかなり簡単に習得できるように実装されていると思います。そのほかサンプルで使っていないようなAPIやLINQ式などの詳細な使い方や型指定をしないドキュメントのプログラムに関しては関しては 冒頭で紹介したリンクをご参照ください。分かりやすく説明されていると思います。