GVKun编程网logo

学习asp.net core集成MongoDB的完整步骤(asp.net core mongodb)

8

对于想了解学习asp.netcore集成MongoDB的完整步骤的读者,本文将提供新的信息,我们将详细介绍asp.netcoremongodb,并且为您提供关于(翻译)MongoDB(18)验证Mon

对于想了解学习asp.net core集成MongoDB的完整步骤的读者,本文将提供新的信息,我们将详细介绍asp.net core mongodb,并且为您提供关于(翻译) MongoDB(18) 验证MongoDB软件包的完整性、.Net Core使用Coravel实现任务调度的完整步骤、.Net Core使用MongoDB的详细教程、.net Core连接MongoDB数据库的步骤详解的有价值信息。

本文目录一览:

学习asp.net core集成MongoDB的完整步骤(asp.net core mongodb)

学习asp.net core集成MongoDB的完整步骤(asp.net core mongodb)

一、前言及MongoDB的介绍

最近在整合自己的框架,顺便把MongoDBD的最简单CRUD重构一下作为组件化集成到asp.net core项目中,当然此篇文章中没有讲解mongodb的集群部署,等有机会分享一下。

首先,我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的。

针对MongoDB,我想大家应该不陌生,没有用过也有听过。

相关学习推荐:ASP.NET视频教程

1、mongodb是什么?

MongoDB是一个基于分布式文件存储的数据库,为web应用提供可扩展的高性能数据存储解决方案,介于关系型数据库和非关系型数据库的产品,是非关系型数据库中功能最丰富的。针对于数据处理是一把利器。

2、什么是关系型数据库和非关系型数据库?

关系型数据库:在我们所用过的sqlserver、MysqL等,这些都是关系型数据库,并且关系型数据库是遵循ACID原则的,严格的一致性。

非关系型数据库:也叫作Nosql,用与超大规模数据的存储,这些类型的数据存储不需要固定的模式,无需多余的操作就可以横向扩展。

3、RDBMS VS Nosql

RDBMS:

  高度组织结构化数据

  结构化查询语言

  数据和关系都存储在单独的表中

  严格一致性

  基础事务

Nosql:

  没有声明性查询语言

  键-值对存储,列存储、文档存储等

  最终一致性

  非结构化和不可预知数据

  CAP定理、高可用、高性能、高扩展

我相信讲到这里,眼尖的同学应该有注意到 CAP定理和最终一致性,肯定会联想到 分布式系统,在这里给你大大的一个赞。在分布式系统中可以完美的结合nosql,提高我们的性能。

4、介绍一下RDBMS与Mongodb的一些概念,有助于帮助大家理解

翻译一下,即如下:

二、asp.net core集成mongoDB

1、为了演示方便我下载了 windows版本的mongodb server

大家可以自行去官网下载,然后针对于可视化界面,我采用了 Robo 3T 这个工具。很简洁美观的可视化工具。推荐大家使用。

安装结束后会在windows服务中看到mongodb server

然后我们打开一下Robo 3T,连接我们的mongodb。

2、开始在项目中配置一下我们的mongodb吧

第一步:我新建一个Core2.0类库

引入了 “MongoDB.Driver” 这个nuget包。

然后扩展了 Startup.cs 中的Services的扩展方法

//扩展方法public static class ServiceCollectionExtensions
 {
 public static void AddMongoDB(this IServiceCollection services, IConfiguration configuration)
 {
  services.Configure<Settings>(options =>
  {
  options.ConnectionString = configuration.GetSection(MongoConnection:ConnectionString).Value;
  options.Database = configuration.GetSection(MongoConnection:Database).Value;
  });
 }
 }

第二步:重构封装了mongodb的CRUD类,此处大家可以自行封装,只展示了查找和新增。

public class MongoDBBase
 {
 private readonly IMongoDatabase _database = null;
 public MongoDBBase(string connectionString, string databaseName)
 {
  var client = new MongoClient(connectionString);
  if (client != null)
  {
  _database = client.GetDatabase(databaseName);
  }
 }

 #region SELECT
 /// <summary>
 /// 根据查询条件,获取数据
 /// </summary>
 /// <typeparam name=T></typeparam>
 /// <param name=id></param>
 /// <returns></returns>
 public List<T> GetList<T>(Expression<Func<T, bool>> conditions = null)
 {
  var collection = _database.GetCollection<T>(typeof(T).Name);
  if (conditions != null)
  {
  return collection.Find(conditions).ToList();
  }
  return collection.Find(_ => true).ToList();
 }#endregion

 #region INSERT/// <summary>
 /// 插入多条数据,数据用list表示
 /// </summary>
 /// <typeparam name=T></typeparam>
 /// <param name=list></param>
 /// <returns></returns>
 public List<T> InsertMany<T>(List<T> list)
 {
  var collection = _database.GetCollection<T>(typeof(T).Name);
  collection.InsertMany(list);
  return list;
 }
 #endregion
 }

第三步:新建一个asp.net core webapi 项目,引用此类库进行演示

在项目中的 appsetting.json 添加 mongodb的连接字符串:我在这边使用自定义的一个数据名称 testdb,在插入mongodb的时候会会自动在创建数据库和集合以及文档。接着往下看

 MongoConnection: { //mongodb数据库连接
 ConnectionString: mongodb://127.0.0.1:27017,
 Database: testdb,
 IsSSL: true
 },

第四步:新建一个mongodb测试控制器,展示了插入单条和多条以及查询的接口。

[Produces(application/json)]
 [Route(api/MongoDB/[action])]
 public class MongoDBController : Controller
 {
  private readonly MongoDBBase _context = null;
  public MongoDBController(IOptions<Settings> settings)
  {
   _context = new MongoDBBase(settings.Value.ConnectionString, settings.Value.Database);
  }
  [HttpGet]
  public IActionResult AddList()
  {
   List<MongoDBPostTest> list = new List<MongoDBPostTest>()
   {
    new MongoDBPosttest()
    {
     Id = 2,
     Body = Test note 3,
     UpdatedOn = DateTime.Now,
     UserId = 1,
     HeaderImage = new NoteImage
     {
      ImageSize = 10,
      Url = http://localhost/image1.png,
      ThumbnailUrl = http://localhost/image1_small.png
     }
    },
    new MongoDBPosttest()
    {
     Id = 3,
     Body = Test note 4,
     UpdatedOn = DateTime.Now,
     UserId = 1,
     HeaderImage = new NoteImage
     {
      ImageSize = 14,
      Url = http://localhost/image3.png,
      ThumbnailUrl = http://localhost/image3_small.png
     }
    }
   };

   try
   {
    _context.InsertMany(list);
   }
   catch (Exception ex)
   {

    throw;
   }

   return Ok(成功);
  }

  [HttpGet]
  public Result<List<MongoDBPostTest>> SelectSingle()
  {
   //无条件
   var list = _context.GetList<MongoDBPostTest>();

   //有条件
   //var list = _context.GetList<MongoDBPostTest>(a => a.Id == 1);

   //得到单条数据,无条件
   //var list = _context.GetSingle<MongoDBPostTest>();

   //得到单条数据,有条件
   //var list = _context.GetSingle<MongoDBPostTest>(a => a.Id == 3);

   ObjectId internalId = _context.GetInternalId(5bbf41651d3b66668cbb5bfc);

   var a = _context.GetSingle<MongoDBPostTest>(note => note.Id == 5bbf41651d3b66668cbb5bfc || note.InternalId == internalId);

   return ResHelper.Suc(1, list, 成功);
  }
}

测试类

public class MongoDBPostTest
 {
  [BsonId]
  // standard BSonId generated by MongoDb
  public ObjectId InternalId { get; set; }
  public string Id { get; set; }

  public string Body { get; set; } = string.Empty;

  [BsonDateTimeOptions]
  public DateTime UpdatedOn { get; set; } = DateTime.Now;

  public NoteImage HeaderImage { get; set; }

  public int UserId { get; set; } = 0;
 }

public class NoteImage
 {
  public string Url { get; set; } = string.Empty;
  public string ThumbnailUrl { get; set; } = string.Empty;
  public long ImageSize { get; set; } = 0L;
 }

第五步:运行项目,执行一下。

我们执行一下插入多条的数据吧,执行成功。

然后我们看一下数据库,发现已经生成了一个 testdb 数据库,里面包含了我们的数据内容

然后我们执行以下查的操作:把我们刚才插入的数据返回回来了。

注意:这边有一个坑有待解决,就是mongodb存储的时间是UTC,会跟我们的本地时间相差8个小时。因此这边需要特殊处理一下时间。

三、总结

至此,mongodb的简单运用已演示完毕,后期大家根据官方文档可进行扩展,越扩展到后面,会觉得越来越有意思。感谢大家的支持。Thank you。

(翻译) MongoDB(18) 验证MongoDB软件包的完整性

(翻译) MongoDB(18) 验证MongoDB软件包的完整性

概述

MongoDB 发布团队对所有软件包进行数字签名, 以便进行认证特定的 MongoDB 软件包是有一个有效的并且未被改变 MongoDB 版本. 在安装 MongoDB 之前, 你应该使用 PGP 签名或者 SHA-256 校验和来验证软件包.

PGP 签名通过检查文件的真实性和完整性来提供最好的保证, 防止篡改.

加密校验和仅校验文件的完整性, 以防止网络传输错误.

过程

使用 PGP/GPG

MongoDB 使用不同的 PGP 密钥对每个版本的分支进行签名. 自 MongoDB 2.2 版本以来, 每个版本的分支的公钥文件可以从密钥服务器下载 .asc 和 .pub 格式的文件.

1. 下载 MongoDB 安装文件.

根据你的环境从 https://www.mongodb.org/downl... 下载二进制文件.

例如, 要通过 shell 下载 OS X 的 3.0.5 版本, 请输入以下命令:

curl -LO https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.0.5.tgz

2. 下载公共签名文件.

curl -LO https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.0.5.tgz.sig

3. 下载然后导入密钥文件.

如果你尚未下载并导入 MongoDB 3.0 公钥, 请输入以下命令:

curl -LO https://www.mongodb.org/static/pgp/server-3.0.asc
gpg --import server-3.0.asc

你应该会接收到这个消息:

gpg: key 24F3C978: public key "MongoDB 3.0 Release Signing Key <packaging@mongodb.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

4. 验证 MongoDB 安装文件

输入这个命令:

gpg --verify mongodb-osx-x86_64-3.0.5.tgz.sig mongodb-osx-x86_64-3.0.5.tgz

你应该会接收到这个消息:

gpg: Signature made Mon 27 Jul 2015 07:51:53 PM EDT using RSA key ID 24F3C978
gpg: Good signature from "MongoDB 3.0 Release Signing Key <packaging@mongodb.com>" [unknown]

如果你收到了以下消息, 请确认你导入了正确的公钥:

gpg: Signature made Mon 27 Jul 2015 07:51:53 PM EDT using RSA key ID 24F3C978
gpg: Can''t check signature: public key not found

如果程序包已经正确的签名, 但是你不信任当前本地 trustdb 的签名, 则 gpg 将返回以下消息:

gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 89AE C6ED 5423 0831 793F  1384 BE0E B6AA 24F3 C978

SHA-256

1. 下载 MongoDB 安装文件.

根据你的环境从 https://www.mongodb.org/downl... 下载二进制文件.

例如, 要通过 shell 下载 OS X 的 3.0.5 版本, 请输入以下命令:

curl -LO https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.0.5.tgz

2. 下载 SHA256 文件

curl -LO https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.0.5.tgz.sha256

3. 使用 SHA256 校验和来验证 MongoDB 包文件.

计算软件包的校验和:

shasum -c mongodb-osx-x86_64-3.0.5.tgz.sha256

如果校验和与下载的软件包相匹配, 则应该放回以下内容:

mongodb-osx-x86_64-3.0.5.tgz: OK

下一章: https://segmentfault.com/a/11...
本文地址: https://docs.mongodb.com/manu...

.Net Core使用Coravel实现任务调度的完整步骤

.Net Core使用Coravel实现任务调度的完整步骤

前言

前段时间需要在一个新项目里添加两个后台任务,去定时请求两个供应商的API来同步数据;由于项目本身只是一个很小的服务,不太希望引入太重的框架,同时也没持久化要求;于是我开始寻找在Quartz.Net、Hangfire之外,是否还有更为轻量级的框架满足我的要求,最终我选择了Coravel.

简介

Coravel是一个专为.NET Core设计的.NET Standard库,除了任务调度,还提供了像队列、缓存、邮件等其它高级功能。特点就是对开发者十分友好,接入十分简单、优雅、流畅,接近于零配置。
作为一个生于2018年的年轻项目,后发优势明显,一开始就是基于.Net Standard 2.0实现,没有历史负担,同时又可以利用很多.Net Core新特性。

用法

首先安装Coravel包

dotnet add package coravel

下面演示在.Net 6 Minimal API项目中接入Coravel并设置两个定时任务,是不是非常简单:)

using Coravel;

var builder = WebApplication.CreateBuilder(args);

//只使用Coravel的任务调度功能
builder.Services.AddScheduler();

//注册你自己的调度任务
builder.Services.AddTransient<YourCoravelJob1>();
builder.Services.AddTransient<YourCoravelJob2>();

var app = builder.Build();

//配置任务
app.Services.UseScheduler(scheduler =>
    {
        scheduler.Schedule<YourCoravelJob1>().EveryFiveMinutes(); //每5分钟执行一次Job1
        scheduler.Schedule<YourCoravelJob2>().Hourly().Monday(); // 每周一每小时执行一次
    });

Coravel预先定义好了很多常用的间隔频率,非常的全面,像上面用到的 EveryFiveMinutes() 和 Hourly(),是不是非常的简单优雅;当然Coravel也支持Cron表达式。

Invocable 是Coravel中的核心概念,代表一个独立的任务,上面的YourCoravelJob1和YourCoravelJob2就是 Invocable,Coravel直接调度这些Invocable
要创建你自己的Invocable,只需实现 IInvocable接口,在 Invoke方法中编码你的任务。

public class YourCoravelJob1 : IInvocable
    {
        private readonly ILogger _logger;

        public YourCoravelJob1(ILogger<YourCoravelJob1> logger)
        {
            _logger = logger;
        }

        public async Task Invoke()
        {
             _logger.LogInformation("start..");
        }
    }
}

原理

Coravel使用是的.Net Core 2.0引入的IHostedService来实现后台定时任务。(因此只有.Net Core 2.0以上的项目才能使用Coravel)

public interface IHostedService
{
    Task StartAsync(CancellationToken cancellationToken);
    Task StopAsync(CancellationToken cancellationToken);
}

SchedulerHost即实现了IHostedService接口,在 其StartAsync方法中,当程序完全启动时,注册了一个的Timer

public Task StartAsync(CancellationToken cancellationToken)
{
    this._lifetime.ApplicationStarted.Register(InitializeAfterAppStarted);
    return Task.CompletedTask;
}

private void InitializeAfterAppStarted()
{
    this._timer = new Timer(this.RunSchedulerPerSecondAsync, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
}

private async void RunSchedulerPerSecondAsync(object state)
{
 if (this._schedulerEnabled)
 {
   await this._scheduler.RunSchedulerAsync();
  }
}

每秒调用 RunSchedulerAsync 激活到点的Invocable,同时会根据情况将任务分组,在单独的线程分开执行。从这里可以看到Coravel是支持秒级任务的。

在 StopAsync 方法中,会先等待正在执行的任务完成才会关闭,这个功能还是比较重要。

public async Task StopAsync(CancellationToken cancellationToken)
{
    this._schedulerEnabled = false; // Prevents changing the timer from firing scheduled tasks.
    this._timer?.Change(Timeout.Infinite, 0);

    this._scheduler.CancelAllCancellableTasks();

    // If a previous scheduler execution is still running (due to some long-running scheduled task[s])
    // we don''t want to shutdown while they are still running.
    if (this._scheduler.IsRunning)
    {
        this._logger.LogWarning(ScheduledTasksRunningMessage);
    }

    while (this._scheduler.IsRunning)
    {
        await Task.Delay(50);
    }
}

总结

本文介绍一个对开发者友好的、轻量级、零配置的.Net Standard库Coravel,并演示了如何使用Coravel在.Net 6 Minimal API中创建定时任务,最后浅析了的实现原理。作为一个年轻的框架,Coravel站在了巨人的肩膀上,相比Quartz.Net、Hangfire,也拥有很多亮点特性,很值得尝试。

到此这篇关于.Net Core使用Coravel实现任务调度的文章就介绍到这了,更多相关.Net Core Coravel实现任务调度内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

参考链接

  • https://github.com/jamesmh/coravel
  • https://docs.coravel.net
  • https://docs.microsoft.com/en-us/dotnet/core/extensions/generic-host
您可能感兴趣的文章:
  • .NET Core 分布式任务调度ScheduleMaster详解

.Net Core使用MongoDB的详细教程

.Net Core使用MongoDB的详细教程

前言

MongoDB 是由C++语言编写的,是一个基于分布式且面向文档存储的开源数据库系统。

下载地址:

https://www.mongodb.com/download-center/community

在.Net Core中使用需要引入核心包 MongoDB.Driver

添加数据:

//与Mongodb建立连接
MongoClient client = new MongoClient("mongodb://127.0.0.1");
//获得数据库,没有则自动创建
IMongoDatabase db = client.GetDatabase("db1");
//拿到集合(表)
IMongoCollection<Student> student = db.GetCollection<Student>("Student");
var data = new Student();
data.id = 1;
data.name = "江北";
data.age = 22;
data.remarks = "暂无";
//添加一条数据
student.InsertOne(data);

在图形化界面中查看一下

Mongodb默认用id做主键,因此不会显式的指定id是主键。Mongdb中没有内置"自增字段",可以把id声明为ObjectId类型,这样插入以后就自动给字段赋值。

例如,建一个类:

public class School
{
 public ObjectId id { get; set; }
 public string name { get; set; }
 public string address { get; set; }
}//需引入命名空间 using MongoDB.Bson;

当然School对象之后多加或者去掉一个字段都行。Mongodb是用Json保存的,因此也可以直接用Json格式插入,可用BsonDocument对象作为泛型对象。

//与Mongodb建立连接
MongoClient client = new MongoClient("mongodb://127.0.0.1");
//获得数据库,没有则自动创建
IMongoDatabase db = client.GetDatabase("db1");
//拿到集合(表)
IMongoCollection<BsonDocument> document = db.GetCollection<BsonDocument>("School");
db.GetCollection<BsonDocument>("School");
var json = "{id:1,name:''xx学校'',address:''xxx路xx号'',remarks:''暂无!''}";
BsonDocument bsons = BsonDocument.Parse(json);

学生和学校是有对应关系的,我们可以添加有嵌套关系类型的对象

public class Student
{
 public int id { get; set; }
 public string name { get; set; }
 public int age { get; set; }
 public string remarks { get; set; }
 public School School { get; set; }
}
//与Mongodb建立连接
MongoClient client = new MongoClient("mongodb://127.0.0.1");
//获得数据库,没有则自动创建
IMongoDatabase db = client.GetDatabase("db1");
//拿到集合(表)
IMongoCollection<Student> student = db.GetCollection<Student>("Student");
Student student1 = new Student();
student1.id = 2;
student1.name = "北晚舟";
student1.age = 22;
student1.remarks = "暂无";
School school = new School();
school.name = "xxxSchool";
school.address = "xxxAddress";
student1.School = school;
student.InsertOne(student1);

数据查询:

//与Mongodb建立连接
MongoClient client = new MongoClient("mongodb://127.0.0.1");
//获得数据库,没有则自动创建
IMongoDatabase db = client.GetDatabase("db1");
//拿到集合(表)
IMongoCollection<Student> student = db.GetCollection<Student>("Student");
var data = Builders<Student>.Filter.Gt(m => m.age, 21);//Gt:大于
var result = student.Find(data).ToList();

我们安装的NuGet包是支持Lamda表达式的,可用条件表达式来查找数据

//与Mongodb建立连接
MongoClient client = new MongoClient("mongodb://127.0.0.1");
//获得数据库,没有则自动创建
IMongoDatabase db = client.GetDatabase("db1");
//拿到集合(表)
IMongoCollection<Student> student = db.GetCollection<Student>("Student");
var data = Builders<Student>.Filter.Where(m => m.age > 21 && m.name.Contains("江"));
var result = student.Find(data).ToList();

分页查询:

//与Mongodb建立连接
MongoClient client = new MongoClient("mongodb://127.0.0.1");
//获得数据库,没有则自动创建
IMongoDatabase db = client.GetDatabase("db1");
//拿到集合(表)
IMongoCollection<Student> student = db.GetCollection<Student>("Student");
var filter = Builders<Student>.Filter.Where(m => m.age > 21);
FindOptions<Student, Student> findOpt = new FindOptions<Student, Student>();
findOpt.Limit = 2;
findOpt.Skip = 1;
findOpt.Sort = Builders<Student>.Sort.Ascending(m => m.age).Descending(m => m.name);
var result = (student.FindAsync(filter, findOpt).Result).ToList();

数据更新:

//与Mongodb建立连接
MongoClient client = new MongoClient("mongodb://127.0.0.1");
//获得数据库,没有则自动创建
IMongoDatabase db = client.GetDatabase("db1");
//拿到集合(表)
IMongoCollection<Student> student = db.GetCollection<Student>("Student");
var filter = Builders<Student>.Filter.Where(m => m.age > 21);
var update = Builders<Student>.Update.Set(m => m.name, "皮卡丘");
//update Student set name="皮卡丘" where age>21
student.UpdateMany(filter, update);

数据删除:

//与Mongodb建立连接
MongoClient client = new MongoClient("mongodb://127.0.0.1");
//获得数据库,没有则自动创建
IMongoDatabase db = client.GetDatabase("db1");
//拿到集合(表)
IMongoCollection<Student> student = db.GetCollection<Student>("Student");
var filter = Builders<Student>.Filter.Where(m => m.age > 21);
//delete from Student where age>21
//student.DeleteMany(filter);
student.DeleteOne(filter);//只删除一个

MongoDB中文网:https://www.mongodb.org.cn

总结

到此这篇关于.Net Core使用MongoDB的完整步骤的文章就介绍到这了,更多相关.Net Core使用MongoDB内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • .Net Core中使用MongoDB搭建集群与项目实战
  • .Net Core如何对MongoDB执行多条件查询
  • asp.net core集成MongoDB的完整步骤
  • .net Core连接MongoDB数据库的步骤详解
  • MongoDB数据库介绍并用.NET Core对其进行编码

.net Core连接MongoDB数据库的步骤详解

.net Core连接MongoDB数据库的步骤详解

前言

前两天在学习MongoDB相关的知识,做了个小Demo,做的是省份下面有多少所学校,嗯,做的比较粗暴。。。

我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的。

所以,在我们安装好了MangoDB后,就可以开始MangoDB的.Net之旅了。

方法如下:

连接MongoDB首先要通过Nuget添加一个MongoDB的包,下载此包

安装完毕后开始写代码了,创建一个省份实体,一个学校实体

using MongoDB.Bson.Serialization.Attributes;using System.Collections.Generic;
namespace MongoCore.Models
{
 public class Province
 {
 [BsonId]
 public int ProvinceID { get; set; }

 public string ProvinceName { get; set; }
 /// <summary>
 /// 省份里有多个学校 这里用集合保存
 /// </summary>
 public IList<School> SchoolName { get; set; }
 }
}

namespace MongoCore.Models
{ //用于后面添加学校 public School(string schoolName, string years) { SchoolName = schoolName; Years = years; }
 public class School
 {
 public string SchoolName { get; set; }
 public string Years { get; set; }
 }
}

创建上下文类,连接MongoDB

namespace MongoCore.Models
{
 public class ProvinceContext
 {
 //定义数据库
 private readonly IMongoDatabase _database = null;
 public ProvinceContext()
 {
  //连接服务器名称 mongo的默认端口27017
  var client = new MongoClient("mongodb://.......:27017");
  if (client != null)
  //连接数据库
  _database = client.GetDatabase("数据库名");
 }

 public IMongoCollection<Province> Province
 {
  get
  {
  return _database.GetCollection<Province>("Province");
  }
 }
 }
}

创建控制器

private readonly ProvinceContext _context = new ProvinceContext();
 public async Task<IActionResult> Index()
 {
  var list = await _context.Province.Find(_ => true).ToListAsync();
  return View(list);
 }

视图

@model List<MongoCore.Models.Province>
@{
 ViewData["Title"] = "Index";
}
<h2>Index</h2>
<h2>Index</h2>
<a asp-action="Create"><input type="button" value="新 建"/></a>
<table>
 <tr>
 <th>省份ID</th>
 <th>省份名称</th>
 <th>操作</th>
 </tr>
 @foreach (var item in Model)
 {
 <tr>
  <td>
  @Html.DisplayFor(modelItem => item.ProvinceID)
  </td>
  <td>
  @Html.DisplayFor(modelItem => item.ProvinceName)
  </td>
  <td>
  <a asp-action="Insert" asp-route-ProvinceID="@item.ProvinceID">新 增</a>&nbsp;&nbsp;
  <a asp-action="Detail" asp-route-ProvinceID="@item.ProvinceID">详 情</a>&nbsp;&nbsp;
  <a asp-action="Delete" asp-route-ProvinceID="@item.ProvinceID">删 除</a>&nbsp;&nbsp;
  </td>
 </tr>
 }
</table>

运行的时候修改配置在Startup.cs里

运行效果是这样的,现在还没有数据,

点击新建按钮添加省份,这里我添加了湖北省

添加省份代码如下:后端

public IActionResult Create()
 {
  return View();
 }
 [HttpPost]
 [ValidateAntiForgeryToken]
 public async Task<ActionResult> Create(Province item)
 {
  try
  {
  //初始化学校类型数据
  item.SchoolName = new List<School>();
  await _context.Province.InsertOneAsync(item);
  return RedirectToAction(nameof(Index));
  }
  catch
  {
  return View();
  }
 }

视图:

@model MongoCore.Models.Province
@{
 ViewData["Title"] = "Create";
}

<h2>Create</h2>
<div>
 <div>
 <form asp-action="Create">
  <div asp-validation-summary="ModelOnly"></div>
  <div>
  <label>省份ID</label>
  <input asp-for="ProvinceID"/>
  </div>
  <div>
  <label>省份名称</label>
  <input asp-for="ProvinceName"/>
  </div>
  <div>
  <input type="submit" value="保 存"/>
  </div>
 </form>
 </div>
</div>

接下来就是添加省份下面的学校了

public async Task<IActionResult> Insert(int ProvinceID)
 {
  var num = await _context.Province.Find(p => p.ProvinceID == ProvinceID).SingleOrDefaultAsync();
  return View(num);
 }
 
 [HttpPost]
 [ValidateAntiForgeryToken]
 public async Task<IActionResult> Insert(int ProvinceID, string Years, string SchoolName)
 {
  var item = await _context.Province.Find(p => p.ProvinceID == ProvinceID).SingleOrDefaultAsync();
  School sl = new School(SchoolName,Years);
  //添加学校
  item.SchoolName.Add(sl);
  //更新
  ReplaceOneResult actionResult
  = await _context.Province
    .ReplaceOneAsync(n => n.ProvinceID.Equals(ProvinceID)
     , item
     , new UpdateOptions { IsUpsert = true });
  return RedirectToAction(nameof(Index));
 }

视图:

@model MongoCore.Models.Province
@{
 ViewData["Title"] = "Insert";
}
<h2>新增</h2>
<div>
 <div>
 <form asp-action="Insert">
  <div asp-validation-summary="ModelOnly"></div>
  <input type="hidden" asp-for="ProvinceID" />
  <div>
  <label>学校名称</label>
  <input name="SchoolName"/>
  </div>
  <div>
  <label>成立年份</label>
  <input name="Years"/>
  </div>
  <div>
  <input type="submit" value="保 存"/>
  </div>
 </form>
 </div>
</div>

然后添加学校,我添加了两所学校,在MongoDB里可以看到数据

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

您可能感兴趣的文章:
  • .Net Core中使用MongoDB搭建集群与项目实战
  • .Net Core使用MongoDB的详细教程
  • .Net Core如何对MongoDB执行多条件查询
  • asp.net core集成MongoDB的完整步骤
  • MongoDB数据库介绍并用.NET Core对其进行编码

今天关于学习asp.net core集成MongoDB的完整步骤asp.net core mongodb的介绍到此结束,谢谢您的阅读,有关(翻译) MongoDB(18) 验证MongoDB软件包的完整性、.Net Core使用Coravel实现任务调度的完整步骤、.Net Core使用MongoDB的详细教程、.net Core连接MongoDB数据库的步骤详解等更多相关知识的信息可以在本站进行查询。

本文标签: