.NET Core(.NET 6)控制檯應用程式與MongoDB Atlas入門實戰示例教程詳解

RECTOR發表於2022-02-26
注:本文首發於碼友網--《.NET Core(.NET 6)控制檯應用程式與MongoDB Atlas入門實戰示例教程詳解

.NET Core(.NET 6)控制檯應用程式與MongoDB Atlas入門示例教程詳解

概述

MongoDB 是一個基於分散式檔案儲存的資料庫,由C++ 語言編寫,旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。

MongoDB 是一個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。

與關係型資料庫不同,MongoDB 的資料以類似於 JSON 格式的二進位制文件儲存:

{
    name: "Angeladady",
    age: 18,
    hobbies: ["Steam", "Guitar"]
}

文件型的資料儲存方式有幾個重要好處:

  • 資料型別可以對應到語言的資料型別,如陣列型別(Array)和物件型別(Object);
  • 可以巢狀,有時關係型資料庫涉及幾個表的操作,在MongoDB中一次就能完成,可以減少昂貴的連線花銷;
  • 不對資料結構加以限制,不同的資料結構可以儲存在同一張表。

開始MongoDB Atlas之旅

準備工作

在開始本文的.NET 6 + MongoDB Atlas實戰之前,請先準備一個MongoDB Atlas賬號以及一個Atlas叢集(Sandbox叢集)。

MongoDB Atlas 是一個 MongoDB 資料庫即服務平臺,可以為你配置和託管資料庫。

MongoDB Atlas Sandbox叢集允許你配置一個記憶體共享,儲存空間為512MB的3節點的開發測試叢集(免費)

申請MongoDB Atlas的免費叢集請引數:MongoDB Atlas 入門教程

建立.NET Core(.NET 6)控制檯應用程式

本文使用Visual Studio 2022進行示例專案開發

開啟Visual Studio 2022,建立一個空白解決方案,取名為MongoDBDemo。之後,右鍵單擊解決方案,選擇新增-->新建專案,在新增新專案視窗中,選擇控制檯應用,如下:

之後,在配置新專案對話方塊中,填寫專案名稱(MongoDBDemo.ConsoleApp)和位置,如下:

其他資訊對話方塊中,框架選擇.NET 6.0(長期支援),如下:

點選建立,Visual Studio將自動建立專案。

安裝基於.NET 6的MongoDB驅動NuGet程式包

右擊MongoDBDemo.ConsoleApp依賴項-->管理NuGet程式包,如下:

在開啟的NuGet包管理器的搜尋框中,輸入關鍵詞MongoDB.Driver,然後選中MongoDB.Driver專案,最後點選安裝以在專案中安裝MongoDB的.NET驅動程式包,如下:

使用.NET Core(.NET 6)連線到MongoDB Atlas

開啟Program.cs檔案,現在我們使用MongoClient來建立.NET 6應用程式與MongoDB Atlas之間的連線,程式碼如下:

using MongoDB.Driver;

var connectionString = "MONGODB_ATLAS_URL";
var client = new MongoClient(connectionString);
var databases = client.ListDatabaseNames().ToList();
foreach (var database in databases)
{
    Console.WriteLine(database);
}

其中,上例程式碼中的MONGODB_ATLAS_URL可以在MongoDB Atlas叢集中獲取到,如下所示:

注:不同使用者的MongoDB Atlas群集地址不同,請替換成你自己的,<password>也改成你自己的MongoDB賬號的對應密碼。

配置好MongoDB的連線字串後,執行MongoDBDemo.ConsoleApp控制檯應用程式,如果配置正確,將得到類似如下的輸出:

sample_geospatial
sample_mflix
sample_restaurants
sample_supplies
sample_training
sample_weatherdata
admin
local
這裡筆者匯入了一些MongoDB官方的示例資料庫,所以,你執行的結果可能與本文的有所不同。

以上是.NET 6程式連線到MongoDB Atlas伺服器並列出了當前叢集中所有的資料庫。

使用.NET Core(.NET 6)向MongoDB Atlas叢集資料庫中寫入資料

在叢集中建立一個名為demo的資料庫,集合(Collection)名稱為dc_user,如下圖:

開啟Visual Studio,在MongoDBDemo.ConsoleApp專案中建立一個命名為Models的資料夾,並在其中建立User.cs的使用者類,其屬性設定如下:

namespace MongoDBDemo.ConsoleApp.Models
{
    public class User
    {
        public ObjectId Id { get; set; }
        public string Name { get; set; }
        public string Password { get; set; }
        public DateTime CreatedAt { get; set; }
        public bool IsActive { get; set; }
        public int Age { get; set; }
        public long Order { get; set; }
        public string Description { get; set; }
    }
}

為了建立C#實體類與MongoDB欄位之間的對映關係,需要使用MongoDB.Bson中的特性對User類的屬性進行標記,如下:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace MongoDBDemo.ConsoleApp.Models
{
    public class User
    {
        [BsonElement("_id")]
        public ObjectId Id { get; set; }
        [BsonElement("name")]
        public string Name { get; set; }
        [BsonElement("password")]
        public string Password { get; set; }
        [BsonElement("created_at")]
        //[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime CreatedAt { get; set; }
        [BsonElement("is_active")]
        public bool IsActive { get; set; }
        [BsonElement("age")]
        public int Age { get; set; }
        [BsonElement("order")]
        public long Order { get; set; }
        [BsonElement("description")]
        public string Description { get; set; }
    }
}

以上主要使用了BsonElement特性來對映實體類與MongoDB欄位之間的對映關係。

接下來,使用.NET 6的User類向MongoDB的dc_user資料庫中寫入資料,示例程式碼如下:

using MongoDB.Driver;
using MongoDBDemo.ConsoleApp.Models;
var dbName = "demo";
var connectionString = "MONGODB_ATLAS_URL";
var client = new MongoClient(connectionString);

var databases = client.ListDatabaseNames().ToList();
foreach (var database in databases)
{
    Console.WriteLine(database);
}

var dcCollection = client.GetDatabase(dbName).GetCollection<User>("dc_user");
var random = new Random();
var count = 0L;
CreateUser();

Console.ReadKey();


// 建立使用者
void CreateUser()
{
    // 查詢當前資料庫中有多少條記錄
    count = dcCollection.CountDocuments("{}");

    dcCollection.InsertOne(new User
    {
        Age = random.Next(10, 60),
        CreatedAt = DateTime.Now,
        IsActive = true,
        Name = $"Rector_{count + 1}",
        Password = "123456",
        Order = count + 1
    });
}

執行以上示例程式,再開啟MongoDB Atlas皮膚,可以看到.NET 6程式寫入的資料,如下:

.NET Core(.NET 6)查詢MongoDB資料

這裡,我們查詢dc_user集合中的所有使用者記錄,示例程式碼如下:

using MongoDB.Driver;
using MongoDBDemo.ConsoleApp.Models;
var dbName = "demo";
var connectionString = "MONGODB_ATLAS_URL";
var client = new MongoClient(connectionString);
var dcCollection = client.GetDatabase(dbName).GetCollection<User>("dc_user");
FindAllUsers();
Console.ReadKey();

void FindAllUsers()
{
    var count = dcCollection.CountDocuments("{}");
    Console.WriteLine($"總使用者數:{count}");
    var users = dcCollection.AsQueryable().ToList();
    foreach (var user in users)
    {
        Console.WriteLine($"id:{user.Id},name:{user.Name},password:{user.Password},created_at:{user.CreatedAt},is_active:{user.IsActive},order:{user.Order},age:{user.Age}");
    }
}

執行結果如下:

總使用者數:1
id:6204c4104c7002c60e09ad72,name:Rector_1,password:123456,created_at:2022-02-10 07:51:44,is_active:True,order:1,age:32

.NET Core(.NET 6)使用Update更新MongoDB資料

using MongoDB.Driver;
using MongoDBDemo.ConsoleApp.Models;
var dbName = "demo";
var connectionString = "MONGODB_ATLAS_URL";
var client = new MongoClient(connectionString);
var dcCollection = client.GetDatabase(dbName).GetCollection<User>("dc_user");
UpdateUser();
FindAllUsers();
Console.ReadKey();

void UpdateUser()
{
    var update = Builders<User>.Update.Set("age", 36);
    dcCollection.FindOneAndUpdate(x => x.Order == 1, update);
}

void FindAllUsers()
{
    var count = dcCollection.CountDocuments("{}");
    Console.WriteLine($"總使用者數:{count}");
    var users = dcCollection.AsQueryable().ToList();
    foreach (var user in users)
    {
        Console.WriteLine($"id:{user.Id},name:{user.Name},password:{user.Password},created_at:{user.CreatedAt},is_active:{user.IsActive},order:{user.Order},age:{user.Age}");
    }
}

執行結果如下:

總使用者數:1
id:6204c4104c7002c60e09ad72,name:Rector_1,password:123456,created_at:2022-02-10 07:51:44,is_active:True,order:1,age:36

可以看到,使用者Order=1Age已經由原來的32更新成了當前的36,說明更新操作成功。

.NET Core(.NET 6)使用Replace替換MongoDB資料

當然,MongoDB還有Replace的API,可以將集合中的資料替換成新的資料,示例如下:

using MongoDB.Driver;
using MongoDBDemo.ConsoleApp.Models;
var dbName = "demo";
var connectionString = "MONGODB_ATLAS_URL";
var client = new MongoClient(connectionString);
var dcCollection = client.GetDatabase(dbName).GetCollection<User>("dc_user");
ReplaceUser();
FindAllUsers();
Console.ReadKey();

void ReplaceUser()
{
    var item = dcCollection.Find(x => x.Order == 1).FirstOrDefault();
    if (item != null)
    {
        item.Age = 60;
        item.Name = "Rector Liu";
        item.Description = "修改(替換)";
        dcCollection.ReplaceOne(x => x.Order == 1, item, new ReplaceOptions());
    }
}

void FindAllUsers()
{
    var count = dcCollection.CountDocuments("{}");
    Console.WriteLine($"總使用者數:{count}");
    var users = dcCollection.AsQueryable().ToList();
    foreach (var user in users)
    {
        Console.WriteLine($"id:{user.Id},name:{user.Name},password:{user.Password},created_at:{user.CreatedAt},is_active:{user.IsActive},order:{user.Order},age:{user.Age}");
    }
}

執行結果如下:

總使用者數:1
id:6204c4104c7002c60e09ad72,name:Rector Liu,password:123456,created_at:2022-02-10 07:51:44,is_active:True,order:1,age:60

.NET Core(.NET 6)刪除MongoDB資料

.NET Core(.NET 6)刪除MongoDB的資料操作如下:

using MongoDB.Driver;
using MongoDBDemo.ConsoleApp.Models;
var dbName = "demo";
var connectionString = "MONGODB_ATLAS_URL";
var client = new MongoClient(connectionString);
var dcCollection = client.GetDatabase(dbName).GetCollection<User>("dc_user");
DeleteUser();
FindAllUsers();
Console.ReadKey();

void DeleteUser()
{
    dcCollection.DeleteOne(x => x.Id == new MongoDB.Bson.ObjectId("6204c4104c7002c60e09ad72"));
}

void FindAllUsers()
{
    var count = dcCollection.CountDocuments("{}");
    Console.WriteLine($"總使用者數:{count}");
    var users = dcCollection.AsQueryable().ToList();
    foreach (var user in users)
    {
        Console.WriteLine($"id:{user.Id},name:{user.Name},password:{user.Password},created_at:{user.CreatedAt},is_active:{user.IsActive},order:{user.Order},age:{user.Age}");
    }
}

執行結果如下:

總使用者數:0

好了,以上即是本文為大家分享的.NET Core(.NET 6)控制檯應用程式與MongoDB Atlas的入門實戰示例教程,希望對你瞭解、學習在.NET Core(.NET 6)應用程式中如何使用MongoDB資料庫有所幫助。

相關文章