注:本文首發於碼友網--《.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=1
的Age
已經由原來的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資料庫有所幫助。