今天就跟大家聊聊有關(guān)怎么在.Net項(xiàng)目中對(duì)MoongoDB進(jìn)行調(diào)用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
方法如下:
1、安裝.Net 驅(qū)動(dòng):Install-Package MongoDB.Driver
2、數(shù)據(jù)插入 ,鏈接數(shù)據(jù)庫
//新建Person測試類 public class Person { public long Id { get; set; } public int Age { get; set; } public string Name { get; set; } public int Height { get; set; } public TestPerson t1{ get; set; } } public class TestPerson { public string Name { get; set; } } public class ObjectPerson { public ObjectId Id { get; set; } public int Age { get; set; } public string Name { get; set; } public int Height { get; set; } }
MongoClient client = new MongoClient("mongodb://127.0.0.1"); IMongoDatabase database = client.GetDatabase("TestDb");//相當(dāng)于數(shù)據(jù)庫 IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大致相當(dāng)于表 Person p1 = new Person() { Id = 2, Name = "test1", Age = 29, Height=130 }; collection.InsertOne(p1);//單條插入也支持異步方法,后面建議都用異步的!習(xí)慣成自然!
回到客戶端工具刷新一下,就能看到新插入的數(shù)據(jù),MongoDB 會(huì)自動(dòng)創(chuàng)建“數(shù)據(jù)庫” 以及 Collection(約等于“表”)。MongoDB 默認(rèn)用 id 做主鍵,因此不用顯式指定 id 是主鍵。
MongoDB 中沒有內(nèi)置“自增字段”,可以把 Id 聲明為 ObjectId 類型(using MongoDB.Bson) 這樣插入以后就自動(dòng)給字段賦值。
//多條插入 IMongoCollection<ObjectPerson> collection1 = database.GetCollection<ObjectPerson>("ObjectPersons");//大致相當(dāng)于表 List<ObjectPerson> persons = new List<ObjectPerson>() { new ObjectPerson() { Name = "test2", Age = 30, Height = 135 }, new ObjectPerson() { Name = "test3", Age = 31, Height = 140 } }; collection1.InsertMany(persons);//多條插入
MongoDB 是用 json 保存的,因此也可以直接以 json 格式插入,用 BsonDocument 來代表:
IMongoCollection<BsonDocument> dogs = database.GetCollection<BsonDocument>("Dogs"); string jsondata = "{id:8999,Age:81,Name:'japan',gender:true}"; BsonDocument p2 = BsonDocument.Parse(jsondata); dogs.InsertOne(p2);
還可以插入有嵌套關(guān)系的對(duì)象,比如學(xué)生和老師,注意不會(huì)有表間關(guān)系,都是存到一個(gè)集合中,注意和關(guān)系庫不一樣。
IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大致相當(dāng)于表 Person p1 = new Person() { Id = 2, Name = "test1", Age = 29, Height=130, t1=new TestPerson() { Name="222"} }; collection.InsertOne(p1);//單條插入
3、MongoDB查詢
IMongoCollection<Person> collection = database.GetCollection<Person>("Persons"); var filter = Builders<Person>.Filter.Gt(p => p.Age,5); var filter1 = Builders<Person>.Filter.And(Builders<Person>.Filter.Gt(p => p.Age, 5), Builders<Person>.Filter.Eq(p => p.Id, 1));// And 并且 還有or方法 var filter2 = Builders<Person>.Filter.Where(p => p.Age > 5 && p.Id == 1);//和上面的寫法是一樣的但是,建議用Where方法 //普通查詢 var result= collection.Find(filter).ToList(); foreach (var item in result) { Console.WriteLine(item.Age + item.Name); }
除了 Gt,還有 Gte、In、Lt、Lte、Ne、Nin、Near、NearSphere、Or、Where、And、Not。 當(dāng)然最常用的還是 Where 操作:
異步查詢
//異步查詢 using (IAsyncCursor<Person> personsCursor = await collection.FindAsync<Person>(filter)) { while (personsCursor.MoveNextAsync().Result)//獲取下一組數(shù)據(jù),相當(dāng)于是否有指針,MongoDB其實(shí)是返回一個(gè)組,不像sql每次是一次次取 { IEnumerable<Person> items = personsCursor.Current;//返回當(dāng)前組的數(shù)據(jù) foreach (var item in items) { Console.WriteLine(item.Age + item.Name); } } //如果數(shù)據(jù)量不大,可以直接tolist var results = personsCursor.ToList(); }
為什么 FindAsync 不直接返回集合,而是要 MoveNext 之后返回一個(gè)集合呢?因?yàn)榉祷?的數(shù)據(jù)量可能很大,因此 MongoDB 是分批下載,下載一批之后執(zhí)行 GET_More 操作返回下 一批。可以通過 FindOptions 參數(shù)的 BatchSize 設(shè)置每一批的大小。
如果確認(rèn)返回的數(shù)據(jù)量 不大,可以 var ps = await personsCursor.ToListAsync()(或者 ToEnumerable()等)一下子返回所有數(shù)據(jù)。還有 Any、First、FirstOrDefault 等以及異步操作。需要注意 MongoDB 中查詢區(qū)分大小寫。
4、分頁查詢
//分頁 FindOptions<Person, Person> findop = new FindOptions<Person, Person>(); findop.Limit = 3;//取最多幾條 findop.Skip = 2;//跳過幾條 findop.Sort = Builders<Person>.Sort.Ascending(p => p.Age).Ascending(p => p.Name);//排序 using (var cursor = collection.FindAsync(filter, findop).Result) { var items = cursor.ToList(); foreach (var item in items) { Console.WriteLine(item.Age + item.Name); } }
指定排序規(guī)則 findop.Sort = Builders<Person>.Sort.Ascending(p => p.Age).Ascending(p => p.Name);
5、Json格式取法
//json格式取法 IMongoCollection<BsonDocument> bsonDoc = database.GetCollection<BsonDocument>("Persons"); var filter4 = Builders<BsonDocument>.Filter.Gt("Age", 5); using (var persons=await bsonDoc.FindAsync(filter4)) { foreach (var item in await persons.ToListAsync()) { Console.WriteLine(item.GetValue("Name").AsString); } }
6、Update更新操作
IMongoCollection<Person> upPersons = database.GetCollection<Person>("Persons"); var upFilter = Builders<Person>.Filter.Where(p => p.Age>20);//篩選條件 var update = Builders<Person>.Update.Set(c => c.Name, "test2");//更新條件,將Name更新成test2 upPersons.UpdateMany(filter, update);
7、Delete刪除操作
IMongoCollection<Person> teachers = database.GetCollection<Person>("Persons"); var deletefilter = Builders<Person>.Filter.Where(p => p.Id == 1); teachers.DeleteMany(deletefilter);
用 Update 機(jī)會(huì)比較少,如果頻繁的用 Update 可能意味著用錯(cuò)了;也不要想著 join、group by, 還是場景不對(duì)!
8、MongoDB 應(yīng)用場景
日志記錄系統(tǒng);設(shè)備監(jiān)控?cái)?shù)據(jù)的存儲(chǔ);餓了么外賣騎手接單; 存儲(chǔ)商品、商家信息;網(wǎng)站評(píng)論信息;存儲(chǔ)爬蟲爬過來的第三方數(shù)據(jù);
但是像訂單、金融交易、游戲裝備等這些關(guān)鍵信息不要用 MongoDB;
看完上述內(nèi)容,你們對(duì)怎么在.Net項(xiàng)目中對(duì)MoongoDB進(jìn)行調(diào)用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
本文標(biāo)題:怎么在.Net項(xiàng)目中對(duì)MoongoDB進(jìn)行調(diào)用-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://chinadenli.net/article34/depspe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、全網(wǎng)營銷推廣、Google、品牌網(wǎng)站設(shè)計(jì)、做網(wǎng)站、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容