欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET連接MongoDB數(shù)據(jù)庫(kù)實(shí)例教程

 更新時(shí)間:2013年11月28日 09:17:07   作者:  
這則小竅門(mén)將講述如何開(kāi)發(fā)一個(gè).NET應(yīng)用來(lái)連接Mongo數(shù)據(jù)庫(kù)并執(zhí)行多種操作。同時(shí)還稍微涉及了Mongo數(shù)據(jù)庫(kù)和多種命令



使用代碼

讓我們從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í)行下面的命令:

復(fù)制代碼 代碼如下:

Install-Package mongocsharpdriver

在項(xiàng)目中添加對(duì)下列命名空間的引用:

復(fù)制代碼 代碼如下:

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ù)的變量:


復(fù)制代碼 代碼如下:

MongoServer _server;
MongoDatabase _database;

用下面的命令連接至數(shù)據(jù)庫(kù)。在這里,數(shù)據(jù)庫(kù)服務(wù)器是在本地主機(jī)上運(yùn)行的,端口為:27017,數(shù)據(jù)庫(kù)名為“ anoop”。

復(fù)制代碼 代碼如下:

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。

復(fù)制代碼 代碼如下:

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");
 }

復(fù)制代碼 代碼如下:

///下面的代碼幫助你從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());

復(fù)制代碼 代碼如下:

///下面的代碼幫助你更新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#中var關(guān)鍵字用法分析

    C#中var關(guān)鍵字用法分析

    這篇文章主要介紹了C#中var關(guān)鍵字用法,實(shí)例分析了C#中var關(guān)鍵字的應(yīng)用場(chǎng)合,對(duì)于.NET的學(xué)習(xí)具有一定參考價(jià)值,需要的朋友可以參考下
    2014-12-12
  • C#訪問(wèn)SqlServer設(shè)置鏈接超時(shí)的方法

    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鏡像

    教你創(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-07
  • 仿orm自動(dòng)生成分頁(yè)SQL分享

    仿orm自動(dòng)生成分頁(yè)SQL分享

    平時(shí)接觸的數(shù)據(jù)庫(kù)有sql2000-2008,Oracle,SQLite 。 分頁(yè)邏輯,Oracle和SQLite相對(duì)好寫(xiě),就SQL事多,Sql2000下只能用top,排序2次,而Sql2005+就可以使用ROW_NUMBER()分析函數(shù)了,據(jù)說(shuō)Sql2012對(duì)分頁(yè)又有了改進(jìn)
    2014-01-01
  • C#中的文件路徑獲取函數(shù)和文件名字獲取函數(shù)小結(jié)

    C#中的文件路徑獲取函數(shù)和文件名字獲取函數(shù)小結(jié)

    這篇文章主要介紹了C#中的文件路徑獲取函數(shù)和文件名字獲取函數(shù)小結(jié),本文講解了獲取絕對(duì)文件路徑、獲取文件名字、獲得包含 path 目錄信等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • C#常用排序方式總結(jié)

    C#常用排序方式總結(jié)

    在最近的項(xiàng)目中經(jīng)常會(huì)對(duì)C#中的數(shù)據(jù)進(jìn)行排序,對(duì)于基本數(shù)據(jù)類型,其排序方式比較簡(jiǎn)單,只需要調(diào)用內(nèi)置算法即可實(shí)現(xiàn),但對(duì)于自定義數(shù)據(jù)類型以及自定義排序規(guī)則的情況實(shí)現(xiàn)起來(lái)就比較麻煩,所以在本文章中將詳細(xì)介紹一下在中C#中如何對(duì)數(shù)據(jù)進(jìn)行排序,需要的朋友可以參考下
    2024-01-01
  • 用NPOI創(chuàng)建Excel、合并單元格、設(shè)置單元格樣式、邊框的方法

    用NPOI創(chuàng)建Excel、合并單元格、設(shè)置單元格樣式、邊框的方法

    本篇文章小編為大家介紹,用NPOI創(chuàng)建Excel、合并單元格、設(shè)置單元格樣式、邊框的方法。需要的朋友參考下
    2013-04-04
  • C#難點(diǎn)逐個(gè)擊破(7):checked與unchecked

    C#難點(diǎn)逐個(gè)擊破(7):checked與unchecked

    checked 關(guān)鍵字用于對(duì)整型算術(shù)運(yùn)算和轉(zhuǎn)換顯式啟用溢出檢查。
    2010-02-02
  • Unity3D獲取當(dāng)前鍵盤(pán)按鍵及Unity3D鼠標(biāo)、鍵盤(pán)的基本操作

    Unity3D獲取當(dāng)前鍵盤(pán)按鍵及Unity3D鼠標(biāo)、鍵盤(pán)的基本操作

    這篇文章主要介紹了Unity3D獲取當(dāng)前鍵盤(pán)按鍵及Unity3D鼠標(biāo)、鍵盤(pán)的基本操作的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • Unity的IPostprocessBuildWithReport實(shí)用案例深入解析

    Unity的IPostprocessBuildWithReport實(shí)用案例深入解析

    這篇文章主要為大家介紹了Unity的IPostprocessBuildWithReport實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評(píng)論