日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在.NET Core中使用MongoDB明细教程(1):驱动基础及文档插入

發布時間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在.NET Core中使用MongoDB明细教程(1):驱动基础及文档插入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


MongoDB,被歸類為NoSQL數據庫(其實我更覺得MongoDb是介于關系型數據庫和非關系型數據庫之間,此外,在我看來在很多場景中MongoDb都可以取代關系型數據庫。),是一個以類JSON格式存儲數據的面向文檔的數據庫系統.MongoDB在底層以名為bson的二進制編碼格式表示JSON文檔,MongoDB bson實現是輕量級、快速和高度可遍歷的。這意味著MongoDB為用戶提供了JSON文檔的易用性和靈活性,以及輕量級二進制格式的速度和豐富性。

作者:依樂祝
原文地址:https://www.cnblogs.com/yilezhu/p/13493195.html

在本教程系列中,我將向您展示如何使用.NET驅動程序提供的CRUD函數在.NET應用程序中使用MongoDB。MongoDB驅動允許您使用來自不同編程語言的MongoDB。在本系列教程中,我們將使用C#驅動程序.

準備工作

在開始之前,我們需要打開VisualStudio并創建一個新項目。我將在本教程中使用一個控制臺項目。為了演示我們需要安裝對應的NuGet包。這里我們需要三個NuGet包,即:

  • MongoDB.Bson獨立的BSON庫,它處理POCOS到BSON類型的轉換(這是MongoDB的文件格式),反之亦然。

  • MongoDB.Driver.Core:--它本身就是一個驅動程序,具有驅動程序的核心組件(如如何連接到mongod實例,連接池),用于從.net到MongoDB的通信,并且它依賴于MongoDB.Bson.

  • MongoDB.Driver*依賴于Driver.Core這反過來又依賴于MongoDB.Bson。它更容易在核心組件驅動程序上使用api,并具有異步方法,并支持Linq.

  • 運行以下命令,會同時安裝上面三個包:

    Install-Package MongoDB.Driver

    訪問數據庫

    若要連接到數據庫,請使用MongoClient類訪問MongoDB實例,并通過它選擇要使用的數據庫。這個類有四個構造函數。

    • 默認情況下,連接到端口27017上的實例的無參數結構器:

    var client = new MongoClient();
    • 接受連接字符串:

    var connectionString = "mongodb://localhost:27017"; var client = new MongoClient(connectionString);
    • 接受一個MongoUrl的實例,而MongoUrl跟使用connectionstring構造函數很類似,您可以通過使用默認構造函數來創建此類實例:

    var client = new MongoClient(new MongoUrl("mongodb://localhost:27017"));

    .或者使用靜態的Create方法:

    var client = new MongoClient(MongoUrl.Create("mongodb://localhost:27017"));
    • 最后一個是接受一個MongoClientSettings的構造函數,這里你可以設置很多東西,比如憑據、連接生存期和超時時間等等。下面是兩個例子:

    var settings1 = MongoClientSettings.FromUrl(MongoUrl.Create("mongodb://localhost:27017"));var settings2 = new MongoClientSettings{Server = new MongoServerAddress("localhost", 27017),UseSsl = false};var client1 = new MongoClient(settings1); var client2 = new MongoClient(settings2);

    通常,你只需要使用包含一個connectionString參數的構造函數就可以了,我們將在本教程中使用此構造函數。代碼如下所示:

    using MongoDB.Driver; using System; namespace MongoDBDemo {class Program{static void Main(string[] args){Test();Console.ReadLine();}static void Test(){var connectionString = "mongodb://localhost:27017";var client = new MongoClient(connectionString);}} }

    使用MongoClient實例,我們可以做很多事情,如刪除數據庫、獲取數據庫或檢索服務器上的數據庫名稱列表等。這里沒有一個用于創建數據庫方法,因為一旦您選擇一個數據庫并將數據插入其中,它將自動創建數據庫。

    這里我們使用的是GetDatabase方法,它將自動為我們創建一個數據庫。如下所示獲取一個名為bookstore?的數據庫:

    IMongoDatabase db = client.GetDatabase("bookstore");

    這個GetDatabase方法返回一個對象,該對象是數據庫的表示形式,我們可以從該對象訪問不同的集合并操作數據庫。這個MongoClient對象是線程安全的,因此您可以將其放在靜態字段中,使其成為可以通過DI容器隨時獲得的Singleton對象,或者使用相同的連接設置實例化一個新的字段(下面將使用相同的連接池);通過這個對象,您可以選擇您想要使用的任何數據庫。

    使用數據庫對象,可以從數據庫創建、重命名、檢索或獲取集合列表。文檔存儲在集合中,如果你對SQL比較熟悉的話,可以將集合視為表,將文檔視為表中的記錄。

    創建一個集合

    若要創建集合,我們將使用?IMongoDatabase對象的CreateCollection?或CreateCollection Async方法來進行 。該方法接受三個參數(最后兩個參數是可選的):

  • 集合的名稱。

  • 創建集合的選項

  • 取消令牌

  • void CreateCollection(string name,CreateCollectionOptions options = null,CancellationToken cancellationToken = default);Task CreateCollectionAsync(string name,CreateCollectionOptions options = null,CancellationToken cancellationToken = default);

    這個CreateCollectionOptions指定集合的特殊設置,例如它應該包含的最大文檔數。下面是一個例子:

    IMongoDatabase database = client.GetDatabase("bookstore");await database.CreateCollectionAsync("books", new CreateCollectionOptions{Capped=true,MaxDocuments=100,});

    大多數情況下,我們只需要創建一個集合,并使用默認的創建設置,因此我們只需要傳遞一個collection的名稱即可。

    await database.CreateCollectionAsync("books");

    創建集合的另一種方法是使用GetCollection它接受集合的名稱和集合設置選項作為參數。使用此方法,即使不存在該名稱的集合,一旦創建文檔,它也會在此之前創建該集合。這通常是您想要的方式,因此這里建議只在你需要創建一個有上限的集合時才使用CREATE進行集合的創建。

    Capped集合是一個固定大小的集合,當它達到最大值時,它會自動覆蓋其最舊的條目。GetCollection方法是泛型的,在調用此方法時需要指定文檔類型。該類型表示要處理的對象/文檔的類型。它可以被強類型化為我們定義的任何類,或者使用BsonDocument類型表示一個允許我們處理集合中任何文檔形狀的動態架構。

    獲取一個集合

    在討論了創建集合之后,還需要一個額外的步驟來檢查集合是否存在,創建它,然后將文檔添加到集合中。如果集合不存在,GetCollection會自動創建一個集合,并將文檔添加到該集合中。因此,即使有一個CreateCollection,我們通常還是希望使用GetCollection。就像數據庫一樣,集合也是線程安全的,并且創建起來非常j簡單。為了獲得一個集合,我們調用GetCollection方法來指定文檔類型

    static async Task TestAsync(){var connectionString = "mongodb://localhost:27017";var client = new MongoClient(connectionString);IMongoDatabase database = client.GetDatabase("bookstore");IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("books");}

    BsonDocument是來自MongoDB.Bson包的類型,它表示BSON文檔,使用這種類型,我們可以處理來自數據庫的任何形狀的數據。這包包含了所有基本BSON類型和其他一些用于使用BSON的方法。

    在這個包中,我們有表示BSON類型的類,以及如何在.NET類型和BsonValue之間映射。下面簡單列舉一些:

    • 我們已經討論過的BsonDocument類型

    • 表示BSON元素的BsonElement

    • BsonValue是各種子類使用的抽象基類,如BsonString、BsonInt 32等。

    這個BsonDocument是字符串到bson值的字典,因此我們可以像初始化字典一樣來進行初始化:

    var document = new BsonDocument{{"bookname", BsonValue.Create(".net core3.1 with mongodb")},{"description", new BsonString("這是一本關于在.net core3.1中使用mongodb進行開發的教程")},{"tags", new BsonArray(new[] {".net core", "mongodb"}) },{"remark", "C#是世界上最好的語言" },{"publishyear", 2020 }};

    .或者使用Add方法,該方法具有多個重載:

    var document2 = new BsonDocument();document2.Add("bookname", ".net core3.1 with mongodb2");document2.Add("description", "這是一本關于在.net core3.1中使用mongodb進行開發的教程2");document2.Add("tags", new BsonArray(new[] { ".net core", "mongodb" }));document2.Add("remark", "C#是世界上最好的語言");document2.Add("publishyear", 2020);

    .或者使用索引器:

    var document3 = new BsonDocument();document3["bookname"] = ".net core3.1 with mongodb3";document3["description"] = "這是一本關于在.net core3.1中使用mongodb進行開發的教程3";document3["tags"] = new BsonArray(new[] { ".net core", "mongodb" });document3["remark"] = "C#是世界上最好的語言";document3["publishyear"] = 2020;

    創建/插入文檔

    文檔存儲在集合中,在查看了創建和獲取集合之后,我們將繼續在集合中插入新文檔。Mongo集合實例提供了一次插入單個文檔和一次插入多個文檔的方法。

    接下來讓我們一步一步來進行實現吧:

    • 獲取一個IMongocollection類型的對象,該對象表示我們要使用的集合:

    IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("books");
    • 然后創建我們想要插入的文檔:

    var document = new BsonDocument{{"bookname", BsonValue.Create(".net core3.1 with mongodb")},{"description", new BsonString("這是一本關于在.net core3.1中使用mongodb進行開發的教程")},{"tags", new BsonArray(new[] {".net core", "mongodb"}) },{"remark", "C#是世界上最好的語言" },{"publishyear", 2020 }};
    • 最后插入該文件:

    await collection.InsertOneAsync(document);

    要想看到這個效果,讓我們開始一個mongod實例,并從控制臺監視事件的同時運行以下完整代碼:

    class Program{static async Task Main(string[] args){await TestAsync();Console.ReadLine();}/// <summary>/// 測試代碼/// </summary>/// <returns></returns>static async Task TestAsync(){var connectionString = "mongodb://localhost:27017";var client = new MongoClient(connectionString);IMongoDatabase database = client.GetDatabase("bookstore");IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("books");var document = new BsonDocument{{"bookname", BsonValue.Create(".net core3.1 with mongodb")},{"description", new BsonString("這是一本關于在.net core3.1中使用mongodb進行開發的教程")},{"tags", new BsonArray(new[] {".net core", "mongodb"}) },{"remark", "C#是世界上最好的語言" },{"publishyear", 2020 }};await collection.InsertOneAsync(document);}}

    ...啟動你的mongo服務并運行程序,看到如下所示的數據:


    image

    這里的InsertOneAsync方法還有一個同步的版本

    collection.InsertOne(document);

    我們還可以使用InsertMany或InsertManyAsync方法進行批量插入。假設我們圖書館又來了三本新書,我們可以使用這個方法同時插入所有的內容,并且它們將被插入到一個批中(假設您使用的是MongoDB2.6或更高版本)。要查看此操作,我們將繼續更新代碼并運行應用程序:

    class Program{static async Task Main(string[] args){await TestAsync();Console.ReadLine();}/// <summary>/// 測試代碼/// </summary>/// <returns></returns>static async Task TestAsync(){var connectionString = "mongodb://localhost:27017";var client = new MongoClient(connectionString);IMongoDatabase database = client.GetDatabase("bookstore");IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("books");await collection.InsertManyAsync(GetBooks());}static IEnumerable<BsonDocument> GetBooks() => new List<BsonDocument> {new BsonDocument{{"bookname", BsonValue.Create(".net core3.1 with mongodb1")},{"description", new BsonString("這是一本關于在.net core3.1中使用mongodb進行開發的教程1")},{"tags", new BsonArray(new[] {".net core", "mongodb"}) },{"remark", "C#是世界上最好的語言" },{"publishyear", 2020 }},new BsonDocument{{"bookname", BsonValue.Create(".net core3.1 with mongodb2")},{"description", new BsonString("這是一本關于在.net core3.1中使用mongodb進行開發的教程2")},{"tags", new BsonArray(new[] {".net core", "mongodb"}) },{"remark", "C#是世界上最好的語言" },{"publishyear", 2020 }},new BsonDocument{{"bookname", BsonValue.Create(".net core3.1 with mongodb2")},{"description", new BsonString("這是一本關于在.net core3.1中使用mongodb進行開發的教程2")},{"tags", new BsonArray(new[] {".net core", "mongodb"}) },{"remark", "C#是世界上最好的語言" },{"publishyear", 2020 }},};}

    這時候我們再進行下查詢,看到所有數據都入庫了


    1597204359324.png

    除了使用BsonDocument,我們通常預先知道我們想要處理的是什么樣的數據,并且我們可以為它們創建自定義的.NET類。遵循我們使用books集合的事例,讓我們創建一個Book類并插入使用此類表示的新書籍:

    internal class Book {public string BookName { get; set; }public string Description { get; set; }public IEnumerable<string> Tags { get; set; }public string Remark { get; set; }public int PublishYear { get; set; } } class Program{static async Task Main(string[] args){await TestAsync();Console.ReadLine();}/// <summary>/// 測試代碼/// </summary>/// <returns></returns>static async Task TestAsync(){var connectionString = "mongodb://localhost:27017";var client = new MongoClient(connectionString);IMongoDatabase database = client.GetDatabase("bookstore");IMongoCollection<Book> collection = database.GetCollection<Book>("books");await collection.InsertManyAsync(GetBooks());}static IEnumerable<Book> GetBooks() => new List<Book> {new Book{BookName=".net core3.1 with mongodb21",Description="這是一本關于在.net core3.1中使用mongodb進行開發的教程21",Tags=new List<string>{ ".net core", "mongodb"},Remark="C#是世界上最好的語言",PublishYear=2020,},new Book{BookName=".net core3.1 with mongodb22",Description="這是一本關于在.net core3.1中使用mongodb進行開發的教程22",Tags=new List<string>{ ".net core", "mongodb"},Remark="C#是世界上最好的語言",PublishYear=2020,},new Book{BookName=".net core3.1 with mongodb23",Description="這是一本關于在.net core3.1中使用mongodb進行開發的教程23",Tags=new List<string>{ ".net core", "mongodb"},Remark="C#是世界上最好的語言",PublishYear=2020,},};}

    使用上面的代碼,我們可以將集合的文檔類型更改為新類,并調用InsertManyAsync方法。運行下程序,然后查詢下集合數據如下所示:


    image

    總結

    通過上面的示例代碼的講解,你應該對如何通過MongoDB .NET 驅動程序來操作MongoDB集合跟文檔有所了解了,并且你也應該知道如何進行文檔的插入,在下一篇文章中,我將介紹如何對文檔進行檢索以及為此構建的各種filter及linq查詢技巧,有興趣的可以關注下我的公眾號“DotNetCore實戰”第一時間進行更新!

    參考資料:https://www.codementor.io/@pmbanugo/working-with-mongodb-in-net-1-basics-g4frivcvz

    往期精彩回顧

    【推薦】.NET Core開發實戰視頻課程?★★★

    .NET Core實戰項目之CMS 第一章 入門篇-開篇及總體規劃

    【.NET Core微服務實戰-統一身份認證】開篇及目錄索引

    Redis基本使用及百億數據量中的使用技巧分享(附視頻地址及觀看指南)

    .NET Core中的一個接口多種實現的依賴注入與動態選擇看這篇就夠了

    10個小技巧助您寫出高性能的ASP.NET Core代碼

    用abp vNext快速開發Quartz.NET定時任務管理界面

    在ASP.NET Core中創建基于Quartz.NET托管服務輕松實現作業調度

    現身說法:實際業務出發分析百億數據量下的多表查詢優化

    關于C#異步編程你應該了解的幾點建議

    C#異步編程看這篇就夠了

    給我好看

    總結

    以上是生活随笔為你收集整理的在.NET Core中使用MongoDB明细教程(1):驱动基础及文档插入的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。