.NET 應用如何連接到 MongoDB 數據庫
引言
這則小竅門將講述如何開發一個.NET應用來連接Mongo數據庫并執行多種操作。同時還稍微涉及了Mongo數據庫和多種命令。
使用代碼
讓我們從Mongo數據庫的一些細節和基本命令開始,并最終介紹如何創建一個可連接至Mongo數據庫的.NET Windows應用。
Mongo數據庫
MongoDB 是一個跨平臺、文檔導向的數據庫系統,它被歸類為“NoSQL”數據庫。MongoDB避開了傳統的基于表的關系數據庫結構,而是使用了帶動態模式的類JSON文檔。MongoDB將這種格式稱為BSON(二進制JSON)。這種動態模式使得特定類型應用中的數據整合更簡單、更快速。MongoDB是自由且開源的軟件。
Mongo數據庫的特性
- Ad hoc 查詢
- 標引
- 復制
- 負載均衡
- 文件存貯
- 聚合
- 服務器端 JavaScript 執行
- 定容集合 </ul>
用戶可從 此處 下載Mongo數據庫,然后將其中內容解壓至任一文件夾。 文件下載完成后,用戶需要配置MongoDB的數據文件夾。做法是在“C:\Data”文件夾下創建一個名為“DB”的文件夾。
數據文件夾創建好以后,可以通過用命令行提示符在“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("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 ("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 ("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("users"); IMongoQuery query = Query.EQ("Name", "Anoop"); Users1 _user = _collection.FindAs (query).FirstOrDefault(); MessageBox.Show(_user.Age.ToString());
///下面的代碼幫助你更新Mongo數據庫中的一條現有記錄。 _collection = _database.GetCollection("users"); IMongoQuery query = Query.EQ("Name", "Anoop"); Users1 _user = _collection.FindAs (query).FirstOrDefault(); MessageBox.Show("Age before update :" + _user.Age.ToString()); //更新年齡的值 _user.Age = 30; //保存更改
_collection.Save(_user); MessageBox.Show("Age after update :" + _user.Age.ToString());</users1></users1></pre>參考
- 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[^]
</ul>