注:本文首发于码友网--《.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_geospatialsample_mflixsample_restaurantssample_suppliessample_trainingsample_weatherdataadminlocal
这里笔者导入了一些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}"); }}
运行后果如下:
总用户数:1id: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}"); }}
运行后果如下:
总用户数:1id: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}"); }}
运行后果如下:
总用户数:1id: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数据库有所帮忙。