环境:Asp.Net Core Mvc 2.2,MongoDB 4.09

参考文档:http://mongodb.github.io/mongo-csharp-driver/    http://mongodb.github.io/mongo-csharp-driver/2.8/    

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-2.2&tabs=visual-studio

创建 ASP.NET Core Mvc 项目

添加models,添加services

        基本的结构就这样了

在models和services项目中安装NuGet依赖库:MongoDB.Driver    。 我安装的最新版:2.8.1版本

Install-Package MongoDB.Driver -Version {VERSION}

添加实体模型类,添加对应的service操作类

BaseModel:

using System;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes; namespace MongoDBDemo.Models
{
public class BaseModel
{
[BsonId] //标记主键
[BsonRepresentation(BsonType.ObjectId)] //参数类型 , 无需赋值
public string Id { get; set; } [BsonElement(nameof(CreateDateTime))] //指明数据库中字段名为CreateDateTime
public DateTime CreateDateTime { get; set; } //[BsonElement(nameof(IsDelete))]
public bool IsDelete { get; set; } public BaseModel()
{
CreateDateTime = DateTime.Now;
IsDelete = false;
}
}
}

Student:

namespace MongoDBDemo.Models
{
public class Student : BaseModel
{
public string Name { get; set; }
public int Age { get; set; }
}
}

BaseService:

using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
using MongoDBDemo.Models;
using System.Collections.Generic; namespace MongoDBDemo.Services
{
public class BaseService<T> where T : BaseModel
{
private readonly IMongoCollection<T> _collection; //数据表操作对象 /// <summary>
/// 构造函数
/// </summary>
/// <param name="config"></param>
/// <param name="tableName">表名</param>
public BaseService(IConfiguration config, string tableName)
{
var client = new MongoClient(config.GetConnectionString("MongoDBDemo")); //获取链接字符串 var database = client.GetDatabase(config.GetSection("MongoDBSetting:DBName").Value); //数据库名 (不存在自动创建) //获取对特定数据表集合中的数据的访问
_collection = database.GetCollection<T>(tableName); // (不存在自动创建)
} //Find<T> – 返回集合中与提供的搜索条件匹配的所有文档。
//InsertOne – 插入提供的对象作为集合中的新文档。
//ReplaceOne – 将与提供的搜索条件匹配的单个文档替换为提供的对象。
//DeleteOne – 删除与提供的搜索条件匹配的单个文档。 /// <summary>
/// 获取所有
/// </summary>
/// <returns></returns>
public List<T> Get()
{
return _collection.Find(T => true).ToList();
} /// <summary>
/// 获取单个
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public T Get(string id)
{
return _collection.Find<T>(T => T.Id == id).FirstOrDefault();
} /// <summary>
/// 创建
/// </summary>
/// <param name="T"></param>
/// <returns></returns>
public T Create(T T)
{
_collection.InsertOne(T);
return T;
} /// <summary>
/// 更新
/// </summary>
/// <param name="id"></param>
/// <param name="TIn"></param>
public void Update(string id, T TIn)
{
_collection.ReplaceOne(T => T.Id == id, TIn);
} /// <summary>
/// 删除
/// </summary>
/// <param name="TIn"></param>
public void Remove(T TIn)
{
_collection.DeleteOne(T => T.Id == TIn.Id);
} /// <summary>
/// 根据id删除
/// </summary>
/// <param name="id"></param>
public void Remove(string id)
{
_collection.DeleteOne(T => T.Id == id);
}
}
}

StudentService:

using Microsoft.Extensions.Configuration;
using MongoDBDemo.Models; namespace MongoDBDemo.Services
{
public class StudentService : BaseService<Student>
{
public StudentService(IConfiguration config) : base(config, nameof(Student))
{ }
}
}

配置文件 appsettings.json 加入

"ConnectionStrings": {
"MongoDBDemo": "mongodb://localhost:27017" //连接字符串
},
"MongoDBSetting": {
"DBName": "Test"
},

上层写好后,需在Web层Startup类中配置注入service注入以便在控制中使用service操作mongodb

 services.AddScoped<StudentService>();       //注入service服务

注入service后在控制器试一下好不好使,运行项目后是好使的

HomeController控制器代码:

    public class HomeController : Controller
{
private readonly StudentService _studentService;
public HomeController(StudentService studentService) //构造函数注入
{
_studentService = studentService;
} public IActionResult Index()
{
return View();
} #region CRUD /// <summary>
/// 获取所有
/// </summary>
/// <returns></returns>
public ActionResult<List<Student>> Get()
{
return _studentService.Get();
} /// <summary>
/// 根据id获取
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public ActionResult<Student> Get(string id)
{
var Student = _studentService.Get(id);
if (Student == null)
{
return NotFound();
}
return Student;
} /// <summary>
///添加
/// </summary>
/// <param name="Student"></param>
/// <returns></returns>
public ActionResult<Student> Create(Student Student)
{
_studentService.Create(Student);
return Ok();
} /// <summary>
/// 更新
/// </summary>
/// <param name="id"></param>
/// <param name="StudentIn"></param>
/// <returns></returns>
public IActionResult Update(string id, Student StudentIn)
{
var Student = _studentService.Get(id); if (Student == null)
{
return NotFound();
}
_studentService.Update(id, StudentIn);
return NoContent();
} /// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public IActionResult Delete(string id)
{
var Student = _studentService.Get(id); if (Student == null)
{
return NotFound();
}
_studentService.Remove(Student.Id);
return NoContent();
}
#endregion public IActionResult Privacy()
{
return View();
} [ResponseCache(Duration = , Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}

试一下添加删除,都是好使的:

完结。参考文档:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-2.2&tabs=visual-studio

最新文章

  1. node Later定时任务
  2. 关于linux上pdf阅读器
  3. [Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test)
  4. js实现收缩菜单效果
  5. 学C++不得不看的一篇文章[转]
  6. psp个人软件过程需求文档
  7. PHP-语法(www.w3school.com.cn/php)
  8. hdu1569find the safest road(floyd变形求最大安全值)
  9. Docker学习笔记 - Docker的镜像
  10. SOLID原则(OOD&amp;OOP)
  11. 在 vue 中使用 vieiwer 图片预览插件
  12. outlook2016用Exchange轻松绑定腾讯企业邮箱
  13. The Chinese Postman Problem HIT - 2739(有向图中国邮路问题)
  14. 封装sqlhelper【一】
  15. ButterKnife RadioGroup选择事件
  16. mysql双主+keepalived【转】
  17. eclipse Maven 使用记录 ------ 建立 webapp项目
  18. 查看Linux下系统资源占用常用命令
  19. 在Linux环境下设置ArcGIS Server 服务开机自启
  20. Kibana部署及配置(四)

热门文章

  1. 【微信错误】{&quot;errcode&quot;:&quot;40013&quot;,&quot;errmsg&quot;:&quot;invalid appid hint: [mackRA06203114]&quot;,&quot;success&quot;:false}
  2. mysql_innodb存储引擎的优化
  3. 洛谷 P1823 [COI2007] Patrik 音乐会的等待
  4. python字符串连接的三种方法
  5. 每天一道Rust-LeetCode(2019-06-04)
  6. 利用nodejs识别二维码内容的方法
  7. [LeetCode] 95. Unique Binary Search Trees II 独一无二的二叉搜索树之二
  8. 使用 Java 执行 groovy 脚本或方法
  9. tecplot——Fluent重叠网格解决方案
  10. idea maven项目打包并部署到tomcat