.NET 應用如何連線到 MongoDB 資料庫

類別: IT

引言

這則小竅門將講述如何開發一個.NET應用來連線Mongo資料庫並執行多種操作。同時還稍微涉及了Mongo資料庫和多種命令。

使用程式碼

讓我們從Mongo資料庫的一些細節和基本命令開始,並最終介紹如何建立一個可連線至Mongo資料庫的.NET Windows應用。

Mongo資料庫

MongoDB是一個跨平臺、文件導向的資料庫系統,它被歸類為“NoSQL”資料庫。MongoDB避開了傳統的基於表的關聯式資料庫結構,而是使用了帶動態模式的類JSON文件。MongoDB將這種格式稱為BSON(二進位制JSON)。這種動態模式使得特定型別應用中的資料整合更簡單、更快速。MongoDB是自由且開源的軟體。

Mongo資料庫的特性
  • Ad hoc 查詢
  • 標引
  • 複製
  • 負載均衡
  • 檔案存貯
  • 聚合
  • 伺服器端 JavaScript 執行
  • 定容集合

使用者可從 此處下載Mongo資料庫,然後將其中內容解壓至任一資料夾。 檔案下載完成後,使用者需要配置MongoDB的資料資料夾。做法是在“C:\Data”資料夾下建立一個名為“DB”的資料夾。
Sample Image - maximum width is 600 pixels

資料資料夾建立好以後,可以通過用命令列提示符在“bin”資料夾下執行“mongod.exe”來啟動Mongo資料庫。

現在資料庫已經啟動,並正在執行。

建立一個.NET應用

建立一個.NET web/Windows應用。在這個示例中,我們將用一個簡單的員工表。

開始之前,我們需要確保系統中裝有MongoDB的.NET驅動。你可以按下面的步驟來為一個指定的專案安裝驅動。

開啟Visual Studio的包管理器:

開啟包管理器控制檯後,使用者可以執行下面的命令:

Install-Package mongocsharpdriver

在專案中新增對下列名稱空間的引用:

using MongoDB.Bson;using MongoDB.Driver;//此外,你將頻繁的用到下面這些 using 語句中的一條或多條:using MongoDB.Driver.Builders;using MongoDB.Driver.GridFS;using MongoDB.Driver.Linq;

宣告資料庫伺服器和資料庫的變數:

MongoServer _server;MongoDatabase _database;
用下面的命令連線至資料庫。在這裡,資料庫伺服器是在本地主機上執行的,埠為:27017,資料庫名為“ anoop”。
private void Form1_Load(object sender, EventArgs e){    string connection = "mongodb://localhost:27017";    _server = MongoServer.Create(connection);    _database = _server.GetDatabase("anoop", SafeMode.True);}
在這裡,我們建立了三個使用不同屬性集合的類。我們可以設定這些類的屬性,並將資料儲存至同一個資料庫、同一個表。這是無模式資料庫的真正優勢:插入資料時不檢查模式。儲存不同的記錄時可以用不同的域的集合,而其它的域 預設被視為NULL。
       public class Users1        {            public ObjectId Id { get; set; }            public string Name { get; set; }            public int Age { get; set; }        }        public class Users2        {            public ObjectId Id { get; set; }            public string Name { get; set; }            public string Location { get; set; }        }        public class Users3        {            public ObjectId Id { get; set; }            public string Name { get; set; }            public int Age { get; set; }            public string Location { get; set; }        }        private void rbEntity1_CheckedChanged(object sender, EventArgs e)        {            txtName.Enabled = true;            txtAge.Enabled = true;            txtLocation.Enabled = true;        }        private void rbEntity2_CheckedChanged(object sender, EventArgs e)        {            txtName.Enabled = true;            txtAge.Enabled = false;            txtLocation.Enabled = true;        }        private void rbEntity3_CheckedChanged(object sender, EventArgs e)        {            txtName.Enabled = true;            txtAge.Enabled = true;            txtLocation.Enabled = false;        }        private void btnSave_Click(object sender, EventArgs e)        {            if (rbEntity1.Checked)            {                var _users = _database.GetCollection<users3 />("users");                var user = new Users3 { };                user.Age = Convert.ToInt32(txtAge.Text);                user.Name = txtName.Text;                user.Location = txtLocation.Text;                _users.Insert(user);                var id = user.Id;            }            else if (rbEntity2.Checked)            {                var _users = _database.GetCollection<users2 />("users");                var user = new Users2 { };                user.Name = txtName.Text;                user.Location = txtLocation.Text;                _users.Insert(user);                var id = user.Id;            }            else if (rbEntity3.Checked)            {                var _users = _database.GetCollection<users1 />("users");                var user = new Users1 { };                user.Age = Convert.ToInt32(txtAge.Text);                user.Name = txtName.Text;                _users.Insert(user);                var id = user.Id;            }            MessageBox.Show("User with name " + txtName.Text + " created");        }
///下面的程式碼幫助你從Mongo資料庫中查詢一條現有記錄。_collection = _database.GetCollection<users1 />("users");IMongoQuery query = Query.EQ("Name", "Anoop");Users1 _user = _collection.FindAs<users1 />(query).FirstOrDefault();MessageBox.Show(_user.Age.ToString());
///下面的程式碼幫助你更新Mongo資料庫中的一條現有記錄。_collection = _database.GetCollection<users1 />("users");IMongoQuery query = Query.EQ("Name", "Anoop");Users1 _user = _collection.FindAs<users1 />(query).FirstOrDefault();MessageBox.Show("Age before update :" + _user.Age.ToString());//更新年齡的值_user.Age = 30;    //儲存更改            _collection.Save(_user);MessageBox.Show("Age after update :" + _user.Age.ToString());

參考

  • http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/[^]
  • http://www.drdobbs.com/database/mongodb-with-c-deep-dive/240152181[^]
  • http://docs.nuget.org/docs/start-here/using-the-package-manager-console[^]
  • http://blogs.msdn.com/b/henrikn/archive/2012/02/19/using-web-api-with-mongodb.aspx[^]
  • http://code.msdn.microsoft.com/Using-MongoDB-with-ASPNET-309ac74b[^]

下載原始碼 - 1.4 MB

.NET 應用如何連線到 MongoDB 資料庫原文請看這裡