注:本文首发于码友网–《.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数据库有所帮助。

运行结果如下:

总用户数:0

好了,以上即是本文为大家分享的.NET Core(.NET 6)控制台应用程序与MongoDB Atlas的入门实战示例教程,希望对你了解、学习在.NET Core(.NET 6)应用程序中如何使用MongoDB数据库有所帮助。

.NET Core(.NET 6)控制台应用程序与MongoDB Atlas入门示例教程详解相关推荐

  1. 微信小程序 获取手机号 JavaScript解密示例代码详解

    刚开始开发微信小程序的时候,想着实现手机验证码登入,后来查阅资料得知,发给用户的短信是要自己付费的.后来想想,微信获取用户的手机号一样可以保证手机号码的真实性,因为手机号既然可以绑定微信,那么肯定是被 ...

  2. 微信小程序之 微信开发工具使用教程详解

    如果你要开发自己的微信小程序或者小游戏,微信开发者工具是必不可少的,因为有些微信封装的方法只有微信开发者工具上才能使用,还有一个重要的原因就是,我们提交我们的代码审核必须通过该工具来提交,所有要做微信 ...

  3. html web form id,小程序如何获取多个formId实现详解

    小程序如何获取多个formId实现详解 发布时间:2020-09-03 08:04:34 来源:脚本之家 阅读:135 作者:jANE2160 很多人使用过form和button的多层嵌套来实现点击一 ...

  4. 《微信小程序:开发入门及案例详解》—— 3.4 小结

    本节书摘来自华章出版社<微信小程序:开发入门及案例详解>一 书中的第3章,第3.4节,作者李骏 边思,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.4 小 ...

  5. imagepreview使用案例_微信小程序wx.previewImage预览图片实例详解

    一.小知识 二.例子 1.wxml 2.wxss .container { box-sizing:border-box; padding:20px; } .previewimg{ float:left ...

  6. 好程序员技术分析JavaScript闭包特性详解

    为什么80%的码农都做不了架构师?>>>    好程序员技术分析JavaScript闭包特性详解,今天来总结一下js闭包的那些事,以及遇到的坑和解决方法,希望对你有所帮助. 是的,没 ...

  7. 如何用c语言编写stm32的程序吗,STM32入门C语言详解

    <STM32入门C语言详解>由会员分享,可在线阅读,更多相关<STM32入门C语言详解(6页珍藏版)>请在人人文库网上搜索. 1.最新 料推荐阅读 flash : 芯片内部存储 ...

  8. 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)

    本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...

  9. 下拉多选框 微信小程序_微信小程序下拉框组件使用方法详解

    本文实例为大家分享了微信小程序下拉框组件的使用方法,供大家参考,具体内容如下 适用场景 1.省市三级联动 2.出生日期选择 3.性别选择 4.一般性的下拉选择等 一.省市三级联动使用 注意mode = ...

  10. 《微信小程序开发》 页面导航最强详解 | 如何对小程序页面进行跳转?

    <微信小程序开发> 页面导航最强详解 | 如何对小程序页面进行跳转? 文章目录 <微信小程序开发> 页面导航最强详解 | 如何对小程序页面进行跳转? 一.微信小程序导航 二.命 ...

最新文章

  1. 《初级前端开发人员经常容易忽视几个细节问题汇总》
  2. Android-PullLayout
  3. 熟读《阿里巴巴java开发手册》(二、异常日志)
  4. MASK -RCNN
  5. CentOS 初体验二十四:redis常用命令:Set
  6. [译] REST API 已死,GraphQL 长存
  7. 函数:MySQL中取整函数round和floor
  8. python dateutil_python时间处理模块dateutil
  9. 2016微信公开课·张小龙演讲全文(下)
  10. 微软输入法数字有间隔_Word 2016中使用微软拼音输入法,换行后输入数字、标点时会没有输入进去,需要再输入一次...
  11. SonarQube代码质量管理平台 的安装、配置与使用
  12. java list下标_java8 stream根据下标分组
  13. 修改手机屏幕刷新率_手机屏幕刷新率真的越高越好吗?
  14. 【bzoj4484】【jsoi2015】最小表示
  15. 电脑端bilibili视频缓存合并视频的解惑
  16. 图片不变形,按照等比例缩小或扩大显示
  17. JavaWeb项目-快递代领-需求分析(二)-软件工程-小组项目
  18. Appium环境搭建之Android SDK及模拟器的下载配置
  19. Mavenir推出智能物联网平台以实现更智能的分析
  20. 动作捕捉系统用于柔性机械臂的末端定位控制

热门文章

  1. 查看dSYM文件的UUID
  2. 最新MTK刷机工具资料(SP_Flash_Tool_exe_Windows_v5.1844.00.000)
  3. VC dimension(Vapnik-Chervonenkis dimension)
  4. ENSP静态路由配置
  5. WinCE下Touch Panel驱动介绍 .
  6. 南昌工程学院c语言试题,南昌工程学院概率论与数理统计试题库部分题目
  7. 运筹学教学|十分钟快速掌握割平面法及对偶单纯形法(附Java代码及算例)
  8. 解决Autodesk License Patcher (NLM Crack)重命名电脑名的问题
  9. java applet 教程_教你构建第一个Java Applet程序
  10. 计算机算法基础:分治法