Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记

.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记

原创
作者头像
郑子铭
修改于 2021-01-06 02:45:38
修改于 2021-01-06 02:45:38
40100
代码可运行
举报
运行总次数:0
代码可运行

2.5.6 MongoDB -- 问答系统

MongoDB 数据库设计

设计优化

  • 内嵌(mongo)还是引用(mysql)
  • 数据一致性

范式:将数据分散到不同的集合;反范式:使用内嵌文档

在范式化的情况下需要在进行多次查询再拼装数据,或者使用 lookup,即跨表查询;反范式化的情况下可以直接查出相关数据

更适合内嵌

更适合引用

子文档较小

子文档较大

数据不会定期改变

数据经常改变

最终数据一致即可

中间阶段数据必须一致

文档数据小幅增加

文档数据大幅增加

数据通过需要执行二次查询才能获得

数据通常不包含在结果中

快速读取

快速写入

需求

  • 查询所有问题(根据标签查询,按发布时间,浏览数量、投票数量、降序排序)
  • 创建问题,回答问题
  • 对问题投票,对答案投票
  • 对问题添加评论,对答案添加评论
  • 对问题进行修改,对答案进行修改
  • 我投过票的问题,我投过票的答案
  • 我浏览过的问题
  • 我回答的问题列表

API 实现概述

postman 文档:https://documenter.getpostman.com/view/4874930/TVYM3F2M#4e7e4e11-c424-41ce-a463-3d1995a78ff8

api

name

GET /api/question

查询问题列表

GET /api/question/{id}

查询单个问题

GET /api/question/{id}/answers

查询单个问题带答案

POST /api/question

创建问题

PATCH /api/question/{id}

修改问题

POST /api/question/{id}/answer

回答问题/添加答案

POST /api/question/{id}/up

向上投票问题

POST /api/question/{id}/down

向下投票问题

POST /api/question/{id}/comment

添加问题评论

GET /api/answer

查询答案

POST /api/answer/{id}/up

向上投票答案

POST /api/answer/{id}/down

向下投票答案

PATCH /api/answer/{id}

修改答案

POST /api/answer/{id}/comment

添加答案评论

创建文档类

  • question
  • answer
  • vote
  • comment
  • view
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace LighterApi.Data.Question
{
    public class Question : Entity
    {
        public String ProjectId { get; set; }

        public string Title { get; set; }

        public string Content { get; set; }

        public List<string> Tags { get; set; } = new List<string>();

        public int ViewCount { get; set; }

        public int VoteCount { get; set; }

        public List<string> VoteUps { get; set; } = new List<string>();

        public List<string> VoteDowns { get; set; } = new List<string>();

        public List<string> Answers { get; set; } = new List<string>();

        public List<Comment> Comments { get; set; } = new List<Comment>();
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace LighterApi.Data.Question
{
    public class Answer : Entity
    {
        public string QuestionId { get; set; }

        public string Content { get; set; }

        public int VoteCount { get; set; }

        public List<string> VoteUps { get; set; } = new List<string>();

        public List<string> VoteDowns { get; set; } = new List<string>();

        public List<Comment> Comments { get; set; } = new List<Comment>();
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace LighterApi.Data.Question
{
    public class Vote : Entity
    {
        public string SourceType { get; set; }

        public string SourceId { get; set; }

        public EnumVoteDirection Direction { get; set; }
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace LighterApi.Data.Question
{
    public class Comment
    {
        public string Content { get; set; }

        public DateTime CreatedAt { get; set; }

        public string CreatedBy { get; set; }
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace LighterApi.Data.Question
{
    public class View : Entity
    {
        public string QuestionId { get; set; }
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace LighterApi.Share
{
    public class ConstVoteSourceType
    {
        public const string Question = "question";

        public const string Answer = "answer";
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace LighterApi.Share
{
    public enum EnumVoteDirection
    {
        Up = 1,
        Down = 0,
    }
}

集成 mongo db driven

  • 安装 nuget 包
  • 服务注入 IMongoClient
  • 连接字符串
安装 nuget 包
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet package install MongoDB.Driver
服务注入 IMongoClient

Startup

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
services.AddSingleton<IMongoClient>(sp =>
{
    return new MongoClient(Configuration.GetConnectionString("LighterMongoServer"));
});

appsettings.json

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"LighterMongoServer": "mongodb://127.0.0.1"
连接字符串
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
连接到单个实例,默认127.0.0.1:27017
var client = new MongoClient();


指定一个连接字符串
var client = new MongoClient("mongodb://localhost:27017");


指写带密码的连接字符串
var client = new MongoClient("mongodb://admin:password@localhost:27017");


连接到一个副本集,客户端服务发现 
var client = new MongoClient("mongodb://localhost:27017,localhost:27018,localhost:27019"

GitHub源码链接:

https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/LighterApi

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/LighterApi
郑子铭
2021/01/06
3730
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
将业务从controller 抽取到 Lighter.Application 层,并为业务建立抽象接口 Lighter.Application.Contract层
郑子铭
2021/01/07
5520
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记
一个工作单元在一个事务范围内保留所有对数据库的变更,在这个工作单元结束的时候一次性提交所有改动到数据库
郑子铭
2020/12/27
1.1K0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 关系)--学习笔记
2.4.4 EF Core -- 关系 一对多 一对一 多对多 示例 关系:https://docs.microsoft.com/zh-cn/ef/core/modeling/relationship
郑子铭
2020/12/29
7100
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 关系)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记
在接收到请求之后,认证(Authentication)和授权(Authorization) 发生在 路由(Routing) 和 终结点(Endpoint) 之间
郑子铭
2021/03/03
4720
.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
乐观处理:系统认为数据的更新在大多数情况下是不会产生冲突的,只在数据库更新操作提交的时候才对数据作冲突检测(推荐)
郑子铭
2020/12/31
6830
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
robt 3t 下载地址: https://download.studio3t.com/robomongo/windows/robo3t-1.4.2-windows-x86_64-8650949.exe
郑子铭
2021/01/02
5970
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记
https://docs.mongodb.com/manual/tutorial/insert-documents/
郑子铭
2021/01/02
8160
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记
Java基础教程(21)-Java连接MongoDB
JQ实验室
2024/05/12
4130
Python基础教程(二十六):对接MongoDB
MongoDB是一种流行的NoSQL数据库,以其高性能、高可用性和灵活的数据模型著称。Python作为一种强大的编程语言,提供了与MongoDB无缝集成的能力,使得数据的读写、查询和管理变得更加便捷。本文将深入探讨如何使用Python与MongoDB进行交互,包括安装配置、基本操作、高级查询和实战案例。
用户11147438
2024/06/22
1.1K0
.NET Core MongoDB的简单使用
使用之前文章提到的MongoDB Compass用法分别添加数据库[myDb]和集合(表)[userinfos]信息,
GoodTime
2024/03/05
4900
.NET Core MongoDB的简单使用
ASP.NET 6 使用工作单元操作 MongoDB
最近工作中需要用到MongoDB的事务操作,因此参考了一些资料封装了一个小的组件,提供基础的CRUD Repository基类 和 UnitOfWork工作单元模式。今天,就来简单介绍一下这个小组件。
Edison Zhou
2023/07/21
4950
ASP.NET 6 使用工作单元操作 MongoDB
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记
索引基数:数据类型多,索引基数高,索引效率高,如果数据比如性别只有男,女两种数据,索引效率低
郑子铭
2021/01/04
4330
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记
https://juejin.im/post/6844903922084085773
郑子铭
2020/12/07
9470
.NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
加载相关数据:https://docs.microsoft.com/zh-cn/ef/core/querying/related-data/
郑子铭
2020/12/30
1.4K0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
补习系列(16)-springboot mongodb 数据库应用技巧
MongoDB 目前非常流行,在最近的DB-Engine排名中居第5位,仅次于传统的关系型数据库如 Oracle、Mysql。
美码师
2019/03/08
2K0
项目之显示回答和显示评论(13)
以上查询只是针对一张表,并且是查询所有字段,则使用实体类就可以封装以上查询到的数据!但是,本次查询应该另创建VO类用于封装查询结果,因为后续显示回答时,每个“回答”还可以存在若干个“评论”,则在“回答”的数据中,应该存在List<评论>的属性,由于当前还没有开发“评论”,所以,暂时无法设计这个属性,但是,后续一定用得上,基于“实体类需要对应数据表”,所以,迟早需要改为VO类来表示此次查询结果,就直接使用VO类了!
海拥
2021/08/23
1.2K0
.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
2.2.3 核心模块--配置 IConfiguration Options ASP.NET Core 中的配置:https://docs.microsoft.com/zh-cn/aspnet/core
郑子铭
2020/12/16
4310
.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
Entity Framework Core:https://docs.microsoft.com/zh-cn/ef/core/
郑子铭
2020/12/28
1.1K0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
mongodb学习(翻译1)
学习mongodb,试着翻译写,英语能力有限,希望大家指正,不顺畅地方大家担待,会后续翻译后面内容;
Jerremy
2022/05/09
1.3K0
推荐阅读
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
3730
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
5520
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记
1.1K0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 关系)--学习笔记
7100
.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记
4720
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
6830
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
5970
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记
8160
Java基础教程(21)-Java连接MongoDB
4130
Python基础教程(二十六):对接MongoDB
1.1K0
.NET Core MongoDB的简单使用
4900
ASP.NET 6 使用工作单元操作 MongoDB
4950
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记
4330
.NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记
9470
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
1.4K0
补习系列(16)-springboot mongodb 数据库应用技巧
2K0
项目之显示回答和显示评论(13)
1.2K0
.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
4310
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
1.1K0
mongodb学习(翻译1)
1.3K0
相关推荐
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验