成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么在.Net項目中對MoongoDB進行調(diào)用-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關怎么在.Net項目中對MoongoDB進行調(diào)用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、重慶小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了漳縣免費建站歡迎大家使用!

方法如下:


1、安裝.Net 驅動: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");//相當于數(shù)據(jù)庫
 IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大致相當于表
 Person p1 = new Person()
 {
 Id = 2,
 Name = "test1",
 Age = 29,
 Height=130
 };   
 collection.InsertOne(p1);//單條插入也支持異步方法,后面建議都用異步的!習慣成自然!

回到客戶端工具刷新一下,就能看到新插入的數(shù)據(jù),MongoDB 會自動創(chuàng)建“數(shù)據(jù)庫” 以及 Collection(約等于“表”)。MongoDB 默認用 id 做主鍵,因此不用顯式指定 id 是主鍵。

怎么在.Net項目中對MoongoDB進行調(diào)用

MongoDB 中沒有內(nèi)置“自增字段”,可以把 Id 聲明為 ObjectId 類型(using MongoDB.Bson) 這樣插入以后就自動給字段賦值。

 //多條插入
 IMongoCollection<ObjectPerson> collection1 = database.GetCollection<ObjectPerson>("ObjectPersons");//大致相當于表
 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);//多條插入

怎么在.Net項目中對MoongoDB進行調(diào)用


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

怎么在.Net項目中對MoongoDB進行調(diào)用


還可以插入有嵌套關系的對象,比如學生和老師,注意不會有表間關系,都是存到一個集合中,注意和關系庫不一樣。


IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大致相當于表
Person p1 = new Person()
{
 Id = 2,
 Name = "test1",
 Age = 29,
 Height=130,
 t1=new TestPerson() { Name="222"}
};   
 collection.InsertOne(p1);//單條插入

怎么在.Net項目中對MoongoDB進行調(diào)用


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。 當然最常用的還是 Where 操作:

 異步查詢

//異步查詢
 using (IAsyncCursor<Person> personsCursor = await collection.FindAsync<Person>(filter)) {
 while (personsCursor.MoveNextAsync().Result)//獲取下一組數(shù)據(jù),相當于是否有指針,MongoDB其實是返回一個組,不像sql每次是一次次取
 {
 IEnumerable<Person> items = personsCursor.Current;//返回當前組的數(shù)據(jù)
 foreach (var item in items)
 {
  Console.WriteLine(item.Age + item.Name);
 }
 }
 //如果數(shù)據(jù)量不大,可以直接tolist
 var results = personsCursor.ToList();
}

  為什么 FindAsync 不直接返回集合,而是要 MoveNext 之后返回一個集合呢?因為返回 的數(shù)據(jù)量可能很大,因此 MongoDB 是分批下載,下載一批之后執(zhí)行 GET_More 操作返回下 一批??梢酝ㄟ^ FindOptions 參數(shù)的 BatchSize 設置每一批的大小。

  如果確認返回的數(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 機會比較少,如果頻繁的用 Update 可能意味著用錯了;也不要想著 join、group by, 還是場景不對!

8、MongoDB 應用場景

  日志記錄系統(tǒng);設備監(jiān)控數(shù)據(jù)的存儲;餓了么外賣騎手接單; 存儲商品、商家信息;網(wǎng)站評論信息;存儲爬蟲爬過來的第三方數(shù)據(jù);

  但是像訂單、金融交易、游戲裝備等這些關鍵信息不要用 MongoDB;

看完上述內(nèi)容,你們對怎么在.Net項目中對MoongoDB進行調(diào)用有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

本文標題:怎么在.Net項目中對MoongoDB進行調(diào)用-創(chuàng)新互聯(lián)
當前鏈接:http://jinyejixie.com/article34/depspe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)全網(wǎng)營銷推廣、Google品牌網(wǎng)站設計、做網(wǎng)站、營銷型網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設
黑水县| 商洛市| 利津县| 阿拉善右旗| 大埔区| 布尔津县| 长宁区| 福州市| 上蔡县| 长宁区| 辽宁省| 山丹县| 汉川市| 永年县| 德格县| 泗洪县| 梅河口市| 成都市| 瓦房店市| 揭西县| 中卫市| 新平| 高青县| 吴川市| 本溪| 许昌市| 广州市| 凯里市| 青川县| 盈江县| 南充市| 巴塘县| 新津县| 谷城县| 通城县| 南城县| 方城县| 安图县| 伊通| 宣汉县| 柳江县|