這篇文章主要介紹“MongoDB的C#驅(qū)動(dòng)的基本使用”,在日常操作中,相信很多人在MongoDB的C#驅(qū)動(dòng)的基本使用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”MongoDB的C#驅(qū)動(dòng)的基本使用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)公司主營(yíng)碌曲網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app開(kāi)發(fā),碌曲h5微信小程序開(kāi)發(fā)搭建,碌曲網(wǎng)站營(yíng)銷推廣歡迎碌曲等地區(qū)企業(yè)咨詢
在使用C#驅(qū)動(dòng)的時(shí)候,要在工程中添加"MongoDB.Bson.dll"和"MongoDB.Driver.dll"的引用。同時(shí)要在代碼中加入下面兩個(gè)using語(yǔ)句。
using MongoDB.Bson;using MongoDB.Driver;
數(shù)據(jù)庫(kù)連接
要建立數(shù)據(jù)庫(kù)連接,就一定要知道服務(wù)器的地址、端口等信息。所有的這些信息,我們都使用連接字符串表示。MongoDB的連接字符串格式如下:
mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
下面看看連接字符串中的各個(gè)字段的含義:
mongodb://:這個(gè)是MongoDB連接字符串的前綴
username:password(Optional):可選項(xiàng),表示登錄用戶名和密碼,用于完成用戶安全驗(yàn)證
hostN: 必須的指定至少一個(gè)host,表示連接到的MongoDB實(shí)例
portN(Optional):可選項(xiàng),默認(rèn)連接到27017
database(Optional):如果指定username:password@,連接并驗(yàn)證登陸指定數(shù)據(jù)庫(kù)。若不指定,默認(rèn)打開(kāi)admin數(shù)據(jù)庫(kù)。
options(Optional):可選項(xiàng),如果不使用/database,則前面需要加上/。所有連接選項(xiàng)都是鍵值對(duì)name=value,鍵值對(duì)之間通過(guò)&或;(分號(hào))隔開(kāi)
在這里,使用文章"MongoDB管理"中的例子,test1和test2有各自的用戶。當(dāng)使用下面的連接字符串訪問(wèn)的時(shí)候,可以得到正確的驗(yàn)證,因?yàn)?quot;Will1:Will1"對(duì)test1有讀寫(xiě)權(quán)限。如果換成訪問(wèn)test2數(shù)據(jù)庫(kù),則會(huì)得到一個(gè)"Invalid credentials for database 'test2'"的異常輸出。
string connectionStr = "mongodb://Will1:Will1@localhost"; MongoClient client = new MongoClient(connectionStr); MongoServer server = client.GetServer(); MongoDatabase db = server.GetDatabase("test2"); MongoCollection<BsonDocument> collection = db.GetCollection("student");try{ Console.WriteLine("db name is: " + db.Name); Console.WriteLine("collections name is: " + collection.Name); Console.WriteLine("{0} items in this collection", collection.Count()); }catch (Exception e) { Console.WriteLine(e.Message); }
從上面的代碼中可以看到:
如何獲取client和server對(duì)象
string connectionStr = "mongodb://Will1:Will1@localhost"; MongoClient client = new MongoClient(connectionStr); MongoServer server = client.GetServer();
如何獲得數(shù)據(jù)庫(kù)和collection對(duì)象
MongoDatabase db = server.GetDatabase("test2"); MongoCollection<BsonDocument> collection = db.GetCollection("student");
在開(kāi)始增刪改查的介紹之前,要介紹一下BsonDocument對(duì)象模型。
在MongoDB collection中,每個(gè)文檔都可以看作一個(gè)Bson(Binary JSON)對(duì)象,所以在驅(qū)動(dòng)中有個(gè)一個(gè)BsonDocument類型,可以通過(guò)下面的方式生成一個(gè)文檔,并且通過(guò)Add方法添加鍵/值對(duì)。通過(guò)這種方式生成的BsonDocument對(duì)象可以直接插入collection中。
BsonDocument student1 = new BsonDocument(); student1.Add("sid", 10); student1.Add("name", "Will10"); student1.Add("gender", "Male"); student1.Add("age", 26);
在MongoDB中,當(dāng)用戶對(duì)collection進(jìn)行操作的時(shí)候可以有兩種方式:
通過(guò)BsonDocument對(duì)象模型
通過(guò)自定義類型
上面已經(jīng)介紹過(guò)了BsonDocument對(duì)象,在這里我們也可以使用自己自定義的類型。比如,我們可以定義一個(gè)Student類型,將該類型的對(duì)象插入到collection中。
public class Student { public ObjectId _id; public int sid; public string name; public string gender; public int age; }
注意:當(dāng)是用自定義類型的時(shí)候一定要有Id字段。
上面兩種方式都可以使用,而且各有好處,通過(guò)自定義類型的方式,可以使得collection中的文檔有比較統(tǒng)一的模式;使用BsonDocument方式則可以支持更多的文檔模式,也就是說(shuō)如果一個(gè)collection中的文檔擁有各種各樣的模式,那么BsonDocument方式就會(huì)更靈活。
關(guān)于數(shù)據(jù)的插入,我們可以使用collection中的"Insert()"方法。下面插入了兩條記錄??梢酝ㄟ^(guò)BsonDocument對(duì)象方式插入,也可以通過(guò)自定義類型方式插入。
通過(guò)BsonDocument的方式,用戶可以自由的定義文檔的格式。例如,增加了一個(gè)“hobby”字段(Ps:不建議這么做,這樣會(huì)對(duì)文檔查詢帶來(lái)麻煩)。
BsonDocument student1 = new BsonDocument(); student1.Add("sid", 10); student1.Add("name", "Will10"); student1.Add("gender", "Male"); student1.Add("age", 26); student1.Add("hobby", new BsonArray() { "swimming","reading"}); collection.Insert(student1); Student student2 = new Student(); student2.age = 27; student2.name = "Wilber"; student2.gender = "Male"; collection.Insert(student2);
通過(guò)MongoDB driver,可以支持三種查詢方法。
這種方式的查詢,類似我們?cè)贛ongoDB shell中的條件查詢。例如,查詢年齡大于20的學(xué)生
QueryDocument queryDocument = new QueryDocument("age", new QueryDocument("$gt",20));foreach (var student in collection.Find(queryDocument)) { Console.WriteLine(student); }
當(dāng)查詢條件為多個(gè)的時(shí)候,例如,查詢年齡大于20的男學(xué)生
QueryDocument queryDocument = new QueryDocument(new BsonElement("age", new QueryDocument("$gt", 20)), new BsonElement("gender","Male"));
Query Builder是一種更簡(jiǎn)潔的方式,當(dāng)通過(guò)這種方式查詢的時(shí)候,我們需要使用driver中的builder來(lái)生成query。所以,要引用下面using語(yǔ)句
using MongoDB.Driver.Builders;
通過(guò)下面的語(yǔ)句,可以查詢年齡大于20的學(xué)生
var query = Query.GT("age", 20); foreach (var student in collection.Find(query)) { Console.WriteLine(student); }
查詢年齡大于20的男學(xué)生
var query = Query.And(Query.GT("age", 20), Query.EQ("gender", "Male"));
當(dāng)然,我們也可以進(jìn)行強(qiáng)類型查詢,但是這種查詢是有前提條件的,"要求文檔中的字段必須是自定義類型字段的子集,也就是要求文檔可以轉(zhuǎn)化為特定類型"。例如,我們前面插入了一個(gè)文檔還有"hobby"這個(gè)key,如果使用下面的方法,就會(huì)產(chǎn)生一個(gè)異常,提示Student類型沒(méi)有hobby這個(gè)字段。
var query = Query<Student>.GT(e => e.age, 20);foreach (var student in collection.FindAs<Student>(query)) { Console.WriteLine(student); }
在這種情況下,可以使用BsonDocument類型進(jìn)行查詢。有一點(diǎn)不明白的就是Query使用Student強(qiáng)類型為什么不報(bào)錯(cuò)。
var query = Query<Student>.GT(e => e.age, 20);foreach (var student in collection.FindAs<BsonDocument>(query)) { Console.WriteLine(student); }
在driver的1.8 release之后,官方驅(qū)動(dòng)就可以支持LINQ操作了。我們只需要通過(guò)下面的using語(yǔ)句,就可以支持LINQ的方式進(jìn)行查詢了。
using MongoDB.Driver.Linq;
所以,可以查詢年齡大于20的學(xué)生,也可以通過(guò)下面方式實(shí)現(xiàn)(注意,同樣要保證所有的document都可以轉(zhuǎn)化為Student類型)
var linquery = from e in collection.AsQueryable<Student>() where e.age > 20 select e;var linquery1 = collection.AsQueryable<Student>().Where(e => e.age > 20);
MongoDB文檔中有很多的LINQ查詢操作,請(qǐng)參閱MongoDB文檔的LINQ部分
文檔更新的方法有兩種,通過(guò)Save方法進(jìn)行整個(gè)文檔替換,或者通過(guò)Update方法進(jìn)行文檔的部分更新。
例如,找到sid為9,并且name為Will9的這個(gè)文檔,把a(bǔ)ge字段更新為27
var query = Query.And(Query.EQ("sid", 9), Query.EQ("name", "Will9")); BsonDocument Will9 = collection.FindOne(query);if (Will9 != null) { Will9["age"] = 27; collection.Save(Will9); }
var query = Query.And(Query.EQ("sid", 9), Query.EQ("name", "Will9"));var update = Update.Set("age", 27); collection.Update(query, update);
刪除數(shù)據(jù)的操作相對(duì)比較簡(jiǎn)單。
刪除特定條件的文檔:
var query = Query.EQ("sid", 9); collection.Remove(query);
刪除所有文檔:
collection.RemoveAll();
到此,關(guān)于“MongoDB的C#驅(qū)動(dòng)的基本使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
分享名稱:MongoDB的C#驅(qū)動(dòng)的基本使用
網(wǎng)站地址:http://chinadenli.net/article14/ihdgge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、微信公眾號(hào)、網(wǎng)站建設(shè)、域名注冊(cè)、小程序開(kāi)發(fā)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)