.Net中MoongoDB的簡(jiǎn)單調(diào)用圖文教程
前言
本文主要給大家介紹了關(guān)于.Net中MoongoDB調(diào)用的方法,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
方法如下:
1、安裝.Net 驅(qū)動(dòng):Install-Package MongoDB.Driver
2、數(shù)據(jù)插入 ,鏈接數(shù)據(jù)庫(kù)
//新建Person測(cè)試類
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ù)庫(kù)
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ù)庫(kù)” 以及 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)系庫(kù)不一樣。
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, 還是場(chǎng)景不對(duì)!
8、MongoDB 應(yīng)用場(chǎng)景
日志記錄系統(tǒng);設(shè)備監(jiān)控?cái)?shù)據(jù)的存儲(chǔ);餓了么外賣騎手接單; 存儲(chǔ)商品、商家信息;網(wǎng)站評(píng)論信息;存儲(chǔ)爬蟲爬過來的第三方數(shù)據(jù);
但是像訂單、金融交易、游戲裝備等這些關(guān)鍵信息不要用 MongoDB;
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。
上一篇:DataGridView使用自定義控件實(shí)現(xiàn)簡(jiǎn)單分頁功能(推薦)
欄 目:ASP.NET
下一篇:asp.net core 騰訊驗(yàn)證碼的接入示例代碼
本文標(biāo)題:.Net中MoongoDB的簡(jiǎn)單調(diào)用圖文教程
本文地址:http://www.jygsgssxh.com/a1/ASP_NET/10862.html
您可能感興趣的文章
- 01-11如何給asp.net core寫個(gè)簡(jiǎn)單的健康檢查
- 01-11淺析.Net Core中Json配置的自動(dòng)更新
- 01-11.net core高吞吐遠(yuǎn)程方法如何調(diào)用組件XRPC詳解
- 01-11.NET Core 遷移躺坑記續(xù)集之Win下莫名其妙的超時(shí)
- 01-11.NET開發(fā)人員關(guān)于ML.NET的入門學(xué)習(xí)
- 01-11docker部署Asp.net core應(yīng)用的完整步驟
- 01-11.net core webapi jwt 更為清爽的認(rèn)證詳解
- 01-11ASP.NET Core靜態(tài)文件的使用方法
- 01-11.NET Core 3.0之創(chuàng)建基于Consul的Configuration擴(kuò)展組件
- 01-11.net core EF Core調(diào)用存儲(chǔ)過程的方式


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-11vscode extension插件開發(fā)詳解
- 01-11VsCode插件開發(fā)之插件初步通信的方法
- 01-11如何給asp.net core寫個(gè)簡(jiǎn)單的健康檢查
- 01-11.net core高吞吐遠(yuǎn)程方法如何調(diào)用組件
- 01-11淺析.Net Core中Json配置的自動(dòng)更新
- 01-11.NET開發(fā)人員關(guān)于ML.NET的入門學(xué)習(xí)
- 01-11.NET Core 遷移躺坑記續(xù)集之Win下莫名其
- 01-11.net core webapi jwt 更為清爽的認(rèn)證詳解
- 01-11docker部署Asp.net core應(yīng)用的完整步驟
- 01-11ASP.NET Core靜態(tài)文件的使用方法
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子


