.NET連接MongoDB數(shù)據(jù)庫(kù)實(shí)例教程
使用代碼
讓我們從Mongo數(shù)據(jù)庫(kù)的一些細(xì)節(jié)和基本命令開(kāi)始,并最終介紹如何創(chuàng)建一個(gè)可連接至Mongo數(shù)據(jù)庫(kù)的.NET Windows應(yīng)用。
Mongo數(shù)據(jù)庫(kù)
MongoDB 是一個(gè)跨平臺(tái)、文檔導(dǎo)向的數(shù)據(jù)庫(kù)系統(tǒng),它被歸類為“NoSQL”數(shù)據(jù)庫(kù)。MongoDB避開(kāi)了傳統(tǒng)的基于表的關(guān)系數(shù)據(jù)庫(kù)結(jié)構(gòu),而是使用了帶動(dòng)態(tài)模式的類JSON文檔。MongoDB將這種格式稱為BSON(二進(jìn)制JSON)。這種動(dòng)態(tài)模式使得特定類型應(yīng)用中的數(shù)據(jù)整合更簡(jiǎn)單、更快速。MongoDB是自由且開(kāi)源的軟件。
Mongo數(shù)據(jù)庫(kù)的特性
Ad hoc 查詢
1 標(biāo)引
2 復(fù)制
3 負(fù)載均衡
4 文件存貯
5 聚合
6 服務(wù)器端 JavaScript 執(zhí)行
7 定容集合
用戶可從 此處 下載Mongo數(shù)據(jù)庫(kù),然后將其中內(nèi)容解壓至任一文件夾。 文件下載完成后,用戶需要配置MongoDB的數(shù)據(jù)文件夾。做法是在“C:\Data”文件夾下創(chuàng)建一個(gè)名為“DB”的文件夾。
數(shù)據(jù)文件夾創(chuàng)建好以后,可以通過(guò)用命令行提示符在“bin”文件夾下運(yùn)行“mongod.exe”來(lái)啟動(dòng)Mongo數(shù)據(jù)庫(kù)。
現(xiàn)在數(shù)據(jù)庫(kù)已經(jīng)啟動(dòng),并正在運(yùn)行。
創(chuàng)建一個(gè).NET應(yīng)用
創(chuàng)建一個(gè).NET web/Windows應(yīng)用。在這個(gè)示例中,我們將用一個(gè)簡(jiǎn)單的員工表。
開(kāi)始之前,我們需要確保系統(tǒng)中裝有MongoDB的.NET驅(qū)動(dòng)。你可以按下面的步驟來(lái)為一個(gè)指定的項(xiàng)目安裝驅(qū)動(dòng)。
打開(kāi)Visual Studio的包管理器:
打開(kāi)包管理器控制臺(tái)后,用戶可以執(zhí)行下面的命令:
Install-Package mongocsharpdriver
在項(xiàng)目中添加對(duì)下列命名空間的引用:
using MongoDB.Bson;
using MongoDB.Driver;
//此外,你將頻繁的用到下面這些 using 語(yǔ)句中的一條或多條:
using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using MongoDB.Driver.Linq;

聲明數(shù)據(jù)庫(kù)服務(wù)器和數(shù)據(jù)庫(kù)的變量:
MongoServer _server;
MongoDatabase _database;
用下面的命令連接至數(shù)據(jù)庫(kù)。在這里,數(shù)據(jù)庫(kù)服務(wù)器是在本地主機(jī)上運(yùn)行的,端口為:27017,數(shù)據(jù)庫(kù)名為“ anoop”。
private void Form1_Load(object sender, EventArgs e)
{
string connection = "mongodb://localhost:27017";
_server = MongoServer.Create(connection);
_database = _server.GetDatabase("anoop", SafeMode.True);
}
在這里,我們創(chuàng)建了三個(gè)使用不同屬性集合的類。我們可以設(shè)置這些類的屬性,并將數(shù)據(jù)保存至同一個(gè)數(shù)據(jù)庫(kù)、同一個(gè)表。這是無(wú)模式數(shù)據(jù)庫(kù)的真正優(yōu)勢(shì):插入數(shù)據(jù)時(shí)不檢查模式。保存不同的記錄時(shí)可以用不同的域的集合,而其它的域 將 默認(rèn)被視為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數(shù)據(jù)庫(kù)中查找一條現(xiàn)有記錄。
_collection = _database.GetCollection<users1 />("users");
IMongoQuery query = Query.EQ("Name", "Anoop");
Users1 _user = _collection.FindAs<users1 />(query).FirstOrDefault();
MessageBox.Show(_user.Age.ToString());
///下面的代碼幫助你更新Mongo數(shù)據(jù)庫(kù)中的一條現(xiàn)有記錄。
_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());
相關(guān)文章
C#訪問(wèn)SqlServer設(shè)置鏈接超時(shí)的方法
這篇文章主要介紹了C#訪問(wèn)SqlServer設(shè)置鏈接超時(shí)的方法,涉及CommandTimeout屬性的相關(guān)設(shè)置技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-06-06教你創(chuàng)建一個(gè)帶診斷工具的.NET鏡像
本文編寫(xiě)的初衷是因?yàn)樵谌豪镉泻芏嘈』锇橛龅缴a(chǎn)環(huán)境性能問(wèn)題的時(shí)候,.NET的runtime鏡像中沒(méi)有帶一些工具,安裝和使用起來(lái)很麻煩,所以分享一些我們公司內(nèi)部一些技巧,對(duì).NET鏡像帶診斷工具相關(guān)知識(shí)感興趣的朋友一起看看吧2022-07-07C#中的文件路徑獲取函數(shù)和文件名字獲取函數(shù)小結(jié)
這篇文章主要介紹了C#中的文件路徑獲取函數(shù)和文件名字獲取函數(shù)小結(jié),本文講解了獲取絕對(duì)文件路徑、獲取文件名字、獲得包含 path 目錄信等內(nèi)容,需要的朋友可以參考下2015-01-01用NPOI創(chuàng)建Excel、合并單元格、設(shè)置單元格樣式、邊框的方法
本篇文章小編為大家介紹,用NPOI創(chuàng)建Excel、合并單元格、設(shè)置單元格樣式、邊框的方法。需要的朋友參考下2013-04-04C#難點(diǎn)逐個(gè)擊破(7):checked與unchecked
checked 關(guān)鍵字用于對(duì)整型算術(shù)運(yùn)算和轉(zhuǎn)換顯式啟用溢出檢查。2010-02-02Unity3D獲取當(dāng)前鍵盤(pán)按鍵及Unity3D鼠標(biāo)、鍵盤(pán)的基本操作
這篇文章主要介紹了Unity3D獲取當(dāng)前鍵盤(pán)按鍵及Unity3D鼠標(biāo)、鍵盤(pán)的基本操作的相關(guān)資料,需要的朋友可以參考下2015-11-11Unity的IPostprocessBuildWithReport實(shí)用案例深入解析
這篇文章主要為大家介紹了Unity的IPostprocessBuildWithReport實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05