.NET Core(.NET 6)控制台应用程序与MongoDB Atlas入门实战教程详解
liebian365 2024-10-18 09:34 27 浏览 0 评论
注:本文首发于码友网--《.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 入门教程
创建.NETCore(.NET 6)控制台应用程序
本文使用Visual Studio 2022进行示例项目开发
打开Visual Studio 2022,创建一个空白解决方案,取名为MongoDBDemo。之后,右键单击解决方案,选择添加-->新建项目,在添加新项目窗口中,选择控制台应用,如下:
之后,在配置新项目对话框中,填写项目名称(MongoDBDemo.ConsoleApp)和位置,如下:
在其他信息对话框中,框架选择**.NET 6.0(长期支持)**,如下:
点击创建,Visual Studio将自动创建项目。
安装基于.NET6的MongoDB驱动NuGet程序包
右击MongoDBDemo.ConsoleApp的依赖项-->管理NuGet程序包,如下:
在打开的NuGet包管理器的搜索框中,输入关键词MongoDB.Driver,然后选中MongoDB.Driver项目,最后点击安装以在项目中安装MongoDB的.NET驱动程序包,如下:
使用.NETCore(.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服务器并列出了当前集群中所有的数据库。
使用.NETCore(.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 = #34;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(#34;总用户数:{count}");
var users = dcCollection.AsQueryable().ToList();
foreach (var user in users)
{
Console.WriteLine(#34;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(#34;总用户数:{count}");
var users = dcCollection.AsQueryable().ToList();
foreach (var user in users)
{
Console.WriteLine(#34;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(#34;总用户数:{count}");
var users = dcCollection.AsQueryable().ToList();
foreach (var user in users)
{
Console.WriteLine(#34;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(#34;总用户数:{count}");
var users = dcCollection.AsQueryable().ToList();
foreach (var user in users)
{
Console.WriteLine(#34;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数据库有所帮助。
相关推荐
- Markdown 常用语法总结(markdown示例)
-
头条不能以代码模式查看,所以分两部分来写:效果、语法。效果和语法部分一一对应,最好自己把语法复制下来保存为.md用md编辑器打开。先看效果:Markdown常用语法注:查阅时在视图中切换为源代码模式...
- CPU眼里的:字符串 vs 数组(字符数组与字符串区别)
-
“它们十分相似,但又非常不同”01提出问题字符串和字符数组,在内存分布上,跟普通数组(例如:int类型的数组)有很高的相似性。但使用字符串的危险系数,却远远高于普通数组。是什么细微的差异导致了二者在使...
- rsync命令详解(rsync命令详解 -X)
-
1.rsync简介rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具RemoteSync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。2.rsync特性rsy...
- Linux操作系统安全配置(linux系统的安全配置有哪些方面)
-
一、服务相关命令systemctlenable服务名#开机自启动systemctldisable服务名#禁用开机自启动systemctlstop服务名#停止服务systemctls...
- 一篇文章学会数据备份利器rsync(备份数据语句)
-
阿铭linux近16年的IT从业经验,6年+鹅厂运维经验,6年+创业公司经验,熟悉大厂运维体系,有从零搭建运维体系的实战经验。关注我,学习主流运维技能,让你比别人提升更快,涨薪更多!作为一个系统管理员...
- 成功尝试在NetBSD9.0中安装Mate Desktop环境记录
-
NETBSD系统桌面安裝系統最新的NetBSD9.0:http://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/images/https://mirrors.tuna.t...
- 使用OpenLDAP集中式认证(openresty集群)
-
1OpenLDAP入门1.1什么是LDAP?1.2我不理解。什么是目录?1.3信息结构是什么样?1.4所以……它可以用来做什么?2OpenLDAP服务器配置2.1.1OLC样式的LDIF...
- 在 Ubuntu 22.04 上安装和配置 VNC 远程桌面
-
环境Ubuntu22.04.2LTSx86_64Step-1安装桌面环境Ubuntu默认使用GNOME桌面环境,但也可以安装其他桌面环境,如Xfce、KDE等。这个可以根据个人喜好选...
- hdfs集群的扩容和缩容(hdfs容量)
-
1、背景当我们的hadoop集群运行了一段时间之后,原有的数据节点的容量已经不能满足我们的存储了,这个时候就需要往集群中增加新的数据节点。此时我们就需要动态的对hdfs集群进行扩容操作(节点服役)。2...
- Zabbix入门操作指南(zabbix怎么使用)
-
上篇:安装与配置一.概述在开始之前,一些概念和定义需要我们提前了解一下(以下内容摘自官方网站)。1.1几个概念架构Zabbix由几个主要的功能组件组成,其职责如下所示。ServerZabbixs...
- 从0开始学习KVM-KVM学习笔记(6)- CentOS远程桌面连接
-
CentOS远程桌面连接CentOS系统上配置远程桌面连接有多种方法,其中最常用的是通过xrdp或vnc来实现。安装xrdr实现CentOS远程桌面安装xrdp安装epel库sudoyu...
- systemd service之:服务配置文件编写(2)
-
接下来会通过示例来描述不同ServiceType值的应用场景。在此之前,强烈建议先阅读前后台进程父子关系和daemon类进程来搞懂进程之间的关系和Daemon类进程的特性。systemdservi...
- Linux项目开发,你必须了解Systemd服务!
-
1.Systemd简介Systemd是什么,以前linux系统启动init机制,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身...
- Oracle 数据库日常巡检之检查数据库安全性
-
在本节主要检查Oracle数据库的安全性,包含:检查系统安全信息,如系统账户,系统防火墙策略,密码策略等。1.检查系统安全信息系统安全日志文件的目录在/var/log下,主要检查登录成功或失败的用户日...
- 「分享」非常全面的CentOS7系统安全检测和加固脚本
-
CentOS7系统检测和加固脚本脚本来源:https://github.com/xiaoyunjie/Shell_Script主要是为了Linux系统的安全,通过脚本对Linux系统进行一键检测和一键...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)