国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

在.Net中使用MongoDB的方法教程

來源:懂視網 責編:小采 時間:2020-11-27 22:35:37
文檔

在.Net中使用MongoDB的方法教程

在.Net中使用MongoDB的方法教程:什么是MongoDB MongoDB是基于文檔的存儲的(而非表),是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大
推薦度:
導讀在.Net中使用MongoDB的方法教程:什么是MongoDB MongoDB是基于文檔的存儲的(而非表),是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大

什么是MongoDB

MongoDB是基于文檔的存儲的(而非表),是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。Mongo主要解決的是海量數據的訪問效率問題。因為Mongo主要是支持海量數據存儲的,所以Mongo還自帶了一個出色的分布式文件系統GridFS,可以支持海量的數據存儲。由于Mongo可以支持復雜的數據結構,而且帶有強大的數據查詢功能,因此非常受到歡迎。

BSON是MongoDB的數據存儲格式。大家對于JSON比較熟悉,但是什么是BSON呢BSON基于JSON格式,選擇JSON進行改造的原因主要是JSON的通用性及JSON的schemaless的特性。

BSON具有如下特點

1.更快的遍歷速度

  對JSON格式來說,太大的JSON結構會導致數據遍歷非常慢。在JSON中,要跳過一個文檔進行數據讀取,需要對此文檔進行掃描才行,需要進行麻煩數據結構匹配,比如括號的匹配,而BSON對JSON的一大改進就是,它會將JSON的每一個元素的長度存在元素的頭部,這樣你只需要讀取到元素長度就能直接seek到指定的點上進行讀取了。

2.操作更簡易

  對JSON來說,數據存儲是無類型的,比如你要修改基本一個值,從9到10,由于從一個字符變成了兩個,所以可能其后面的所有內容都需要往后移一位才可以。而使用BSON,你可以指定這個列為數字列,那么無論數字從9長到10還是100,我們都只是在存儲數字的那一位上進行修改,不會導致數據總長變大。當然,在MongoDB中,如果數字從整形增大到長整型,還是會導致數據總長變大的。

3.增加了額外的數據類型

  JSON是一個很方便的數據交換格式,但是其類型比較有限。BSON在其基礎上增加了“byte array”數據類型。這使得二進制的存儲不再需要先base64轉換后再存成JSON。大大減少了計算開銷和數據大小。當然,在有的時候,BSON相對JSON來說也并沒有空間上的優勢,因為有了類型概念。

MongoDB windows下 安裝

MongoDB的安裝很簡單,設置好安裝路徑后,一直Next直到安裝結束,最大的坑就是MongoDB服務的安裝,下面具體說下MongoDB安裝之后的一些配置操作

1.在根目錄下創建數據庫路徑(data目錄)、日志路徑(logs目錄)、日志文件(mongo.log文件)、配置路徑(conf目錄)我的安裝路徑是:D:\Program Files\mongodb

2.在conf目錄下創建配置文件mongo.conf,文件內容如下:

logpath=D:\Program Files\mongodb\logs\mongodb.log #日志
輸出文件路徑 logappend=true #錯誤日志采用追加模式,配置這個選項后mongodb的日志會追加到現有的日志文件,而不是從新創建一個新文件 journal=true #啟用日志文件,默認啟用 quiet=true #這個選項可以過濾掉一些無用的日志信息,若需要調試使用請設置為false port=27017 #端口號 默認為27017 auth=true #啟用驗證 需要用戶名密碼

配置完成以上2個步驟 就可以 啟動MongoDB了

運行CMD 輸入命令 (注意 mongod的路徑)

mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf"

3.創建并啟動MongoDB服務

如果每次都按照步驟三那樣操作,豈不是相當麻煩,按照如下命令來創建并啟動MongoDB服務,就可以通過windows服務來管理MongoDB的啟動和關閉了

mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf" --install --serviceName "MongoDB"

net start MongoDB 

測試是否成功 可以在 瀏覽器中輸入http://localhost:27017/如果出現下圖表示服務安裝成功

如果需要卸載MongoDB服務 在CMD 中運行

mongod.exe --remove --serviceName "MongoDB"

前期準備工作完成了,就可以開始擼代碼了

如何在.net 中使用MongoDB

首先在項目中引入 MongoDB.Bson.dll,MongoDB.Driver.dll,MongoDB.Driver.Core.dll 我使用的是2.0版本的 現在好多文章都是介紹使用1+版本的 這也是我寫此文的目的引入驅動DLL后,就可以開始擼代碼了

部分代碼如下

private static MongoClient client;

private static IMongoDatabase database;

//本地配置

private const string MongoDBConnectionStr = "mongodb://localhost";

//數據庫名稱

private static string DefaultDataBaseName = "Test";

 

 

public MongoDBHelper()

{

 GetConnection(DefaultDataBaseName);

}

 

/// <summary>

/// 構造函數 指定數據庫

/// </summary>

/// <param name="dataBaseName"></param>

public MongoDBHelper(string dataBaseName)

{

 GetConnection(dataBaseName);

}

 

private static void GetConnection(string dataBaseName)

{

 client = new MongoClient(MongoDBConnectionStr);

 database = client.GetDatabase(dataBaseName);

}

 

/// <summary>

/// 異步插入一條數據,手動輸入collection name

/// </summary>

public Task InsertAsync<T>(string collectionName, T obj)

{

 if (database == null)

 {

 throw new Exception("沒有指定數據庫");

 }

 var collection = database.GetCollection<T>(collectionName);

 return collection.InsertOneAsync(obj);

}

 

/// <summary>

/// 異步插入一條數據,采用類型T的完全限定名作為collection name

/// </summary>

public Task InsertAsync<T>(T obj)

{

 return InsertAsync(typeof(T).FullName, obj);

}

 

/// <summary>

/// 異步插入多條數據,手動輸入collection name

/// </summary>

public Task BatchInsertAsync<T>(string collectionName, IEnumerable<T> objs)

{

 if (database == null)

 {

 throw new Exception("沒有指定數據庫");

 }

 if (objs == null)

 {

 throw new ArgumentException();

 }

 var collection = database.GetCollection<T>(collectionName);

 return collection.InsertManyAsync(objs);

}

 

/// <summary>

/// 異步插入多條數據,采用類型T的完全限定名作為collection name

/// </summary>

public Task BatchInsertAsync<T>(IEnumerable<T> objs)

{

 return BatchInsertAsync(typeof(T).FullName, objs);

}

 

/// <summary>

/// 插入一條數據

/// </summary>

public void Insert<T>(T obj)

{

 InsertAsync(obj).Wait();

}

 

/// <summary>

/// 插入多條數據

/// </summary>

public void Insert<T>(IEnumerable<T> objs)

{

 BatchInsertAsync(objs).Wait();

}

 

/// <summary>

/// MongoDB C# Driver的Find方法,返回IFindFluent。手動輸入collection name

/// </summary>

public IFindFluent<T, T> Find<T>(string collectionName, FilterDefinition<T> filter, FindOptions options = null)

{

 if (database == null)

 {

 throw new Exception("沒有指定數據庫");

 }

 var collection = database.GetCollection<T>(collectionName);

 return collection.Find(filter, options);

}

 

/// <summary>

/// MongoDB C# Driver的Find方法,返回IFindFluent。采用類型T的完全限定名作為collection name

/// </summary>

public IFindFluent<T, T> Find<T>(FilterDefinition<T> filter, FindOptions options = null)

{

 return Find(typeof(T).FullName, filter, options);

}

 

/// <summary>

/// 取符合條件的數據 sort中多個排序條件逗號分隔,默認asc

/// </summary>

public List<T> Get<T>(Expression<Func<T, bool>> condition, int skip, int limit, string sort)

{

 return Get(new List<Expression<Func<T, bool>>> { condition }, skip, limit, sort);

}

 

public List<T> Get<T>(Expression<Func<T, bool>> condition)

{

 return Get(condition, 0, 0, null);

}

 

/// <summary>

/// 取符合條件的數據 sort中多個排序條件逗號分隔,默認asc

/// </summary>

public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions, int skip, int limit, string sort)

{

 if (conditions == null || conditions.Count == 0)

 {

 conditions = new List<Expression<Func<T, bool>>> { x => true };

 }

 var builder = Builders<T>.Filter;

 var filter = builder.And(conditions.Select(x => builder.Where(x)));

 

 var ret = new List<T>();

 try

 {

 List<SortDefinition<T>> sortDefList = new List<SortDefinition<T>>();

 if (sort != null)

 {

 var sortList = sort.Split(',');

 for (var i = 0; i < sortList.Length; i++)

 {

 var sl = Regex.Replace(sortList[i].Trim(), @"\s+", " ").Split(' ');

 if (sl.Length == 1 || (sl.Length >= 2 && sl[1].ToLower() == "asc"))

 {

 sortDefList.Add(Builders<T>.Sort.Ascending(sl[0]));

 }

 else if (sl.Length >= 2 && sl[1].ToLower() == "desc")

 {

 sortDefList.Add(Builders<T>.Sort.Descending(sl[0]));

 }

 }

 }

 var sortDef = Builders<T>.Sort.Combine(sortDefList);

 ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result;

 }

 catch (Exception e)

 {

 //異常處理

 }

 return ret;

}

 

public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions)

{

 return Get(conditions, 0, 0, null);

} 

示例代碼中只實現了插入和查詢功能,后續會將完整代碼上傳

總結

本文只記錄了MongoDB的最基本使用,后續會介紹副本級,主從自動備份等機制與實現方式,感興趣的朋友們請繼續關注腳本之家,謝謝大家對腳本之家的支持。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

在.Net中使用MongoDB的方法教程

在.Net中使用MongoDB的方法教程:什么是MongoDB MongoDB是基于文檔的存儲的(而非表),是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大
推薦度:
標簽: 教程 的方法 net
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲欧美日韩中文无线码 | 欧美视频日韩视频 | 日韩欧美高清一区 | 国产精品久久久久一区二区 | 亚洲日韩欧美视频 | 欧美精品在线视频 | 欧美啊v在线观看 | 国产精品毛片久久久久久久 | 国产日韩欧美一区二区三区视频 | 日本韩国在线 | 黄色网站在线观看视频 | 欧美日本一区二区 | 伊人网影院 | 亚洲一区二区在线成人 | 欧美三级不卡 | 欧美第一页在线 | 久草婷婷| 久久99国产精品成人欧美 | 亚洲精品影院久久久久久 | 成人精品在线视频 | 日本全黄视频 | 五十路夫妻 | 快播电影网日韩新片 | 国产精品一区二区国产 | 国产成人精品一区二区三区… | 草逼电影| 国产成人精品免费视频大 | 91精品国产91久久久久福利 | 国产v欧美v日韩在线观看 | 交换国产精品视频一区 | 日本不卡视频在线观看 | 欧美 日韩 国产 成人 在线观看 | 日韩中文在线视频 | 一级a毛片免费观看久久精品 | 国产真实乱人偷精品 | 久久久不卡国产精品一区二区 | 国产在线一区二区三区 | 欧美精品久久久亚洲 | 欧美一级久久久久久久大片 | 久久一次 | 日韩精品一区二区三区国语自制 |