数据库与ODM/ORM
MongoDB
基础知识
C++编写
基于分布式文件存储的开源数据库系统
将数据存储为一个文档, 数据结构由键值对组成,MongoDB文档类似于JSON对象
数据库分类
-
关系型 RDBMS
MySQL、SQL Server、Oracle 结构化 不适合创新
-
非关系型 No SQL
MongoDB 文档型数据库 为了快速开发Web应用而设计 类似于JSON数据结构——BSON Binary JSON、Redis 键值对数据库
mongod --dbpath 可以修改数据保存位置 --port 修改端口号
mongod 启动服务器(保存数据)
mondo 启动客户端 (可以操作服务器,对数据进行CURD)
6.0版本之后需要使用mongosh
compass工具
通过图像化(或界面)的方式来操作Mongodb数据库的可视化工具
1、下载的官网地址
Download MongoDB Community Server | MongoDB
2、注册
这里其实不用注册 直接下载社区免费版本即可
本次下载的版本是:mongoDB 6.0.8 (小版本为偶数表示稳定版 奇数为开发版)
3、安装
MongoDB下载与安装_mouyetxesfvbnkiuyfvbjnnkpv下载_程序员的脱发之路的博客-CSDN博客
博文安装中遇到的问题
1、因为下载的版本是6.0版本开始 这个版本之后安装bin目录下是没有mongo.exe文件的
解决的方案
MongoDB 安装教程和MongoDB bin文件夹下没有mongo.exe解决方案及介绍mongod和mongos之间的确切区别是什么_mongos和mongod_代码匪徒的博客-CSDN博客
最好将shell的bin目录配置到系统路径下
2、安装mongodb时最好不要安装compass这个可视化工具,时间长并且可能安装不成功
安装compass工具链接:
[MongoDB6的安装与配置 - 掘金 (juejin.cn)](https://juejin.cn/post/7232977661205954621# 四、MongoDB Compass)
mongodb GUI工具:navicat(收费)compass(不收费)
因此选择的GUI工具时navicat 15版本
使用navicat 链接mongodb数据库的方式
如何用Navicat连接mongoDB_宾宾叔叔的博客-CSDN博客
在连接之前需要先新建mongodb数据库 下面是在命令行中创建的mongoDB数据库(使用mongosh <已安装>进入mongo shell才行)
在后面加上–port 可以修改默认端口 27017
使用Navicat Premium操作mongodb CRUD
[Navicat Premium操作Mongodb(基本的增删改查)_navicat操作mongodb_梨轻巧的博客-CSDN博客](https://blog.csdn.net/m0_45877477/article/details/125516511#:~:text=文件--新建连接--Mongodb--起名字--测试连接--确定 连接名字上–右键–打开连接 连接名字上–右键–新建数据库–起名字,数据库名字上–右键–打开数据库 2.2 创建集合)
一些数据库的原生操作命令
Mongoose
安装
npm install mongoose
连接MongoDB
// 导入 mongoose 模块
const mongoose = require("mongoose");
// 设置默认 mongoose 连接
const mongoDB = "mongodb://127.0.0.1/my_database";
mongoose.connect(mongoDB);
// 让 mongoose 使用全局 Promise 库
mongoose.Promise = global.Promise;
// 取得默认连接
const db = mongoose.connection;
// 将连接与错误事件绑定(以获得连接错误的提示)
db.on("error", console.error.bind(console, "MongoDB 连接错误:"));
定义添加模型
模型使用 Schema 接口进行定义。
官方文档对Schema定义
Everything in Mongoose starts with a Schema. Each schema maps to a MongoDB collection and defines the shape of the documents within that collection.
Schema 可以定义每个文档中存储的字段,及字段的验证要求和默认值。目前默认理解为表(因为collection -> table)
定义模式
// 获取 Mongoose
const mongoose = require("mongoose");
// 定义一个模式
var Schema = mongoose.Schema;
// 定义字段
var SomeModelSchema = new Schema({
a_string: String,
a_date: Date,
});
创建模型
// 定义模式
const Schema = mongoose.Schema;
const SomeModelSchema = new Schema({
a_string: String,
a_date: Date,
});
// 使用模式“编译”模型
// param1: 为模型创建集合的别名
// param2: 创建模型时使用的模式
const SomeModel = mongoose.model("SomeModel", SomeModelSchema);
定义模型类后,可以使用它们来创建、更新或删除记录,以及通过查询来获取所有记录或特定子集。
模式类型(字段)
可以理解为定义模式时需要定义的字段类型
const schema = new Schema({
name: String,
binary: Buffer,
living: Boolean,
updated: { type: Date, default: Date.now },
age: { type: Number, min: 18, max: 65, required: true },
// 任意模式类型
mixed: Schema.Types.Mixed,
_someId: Schema.Types.ObjectId,
// 数组
array: [],
ofString: [String], // 其他类型也可使用数组
nested: { stuff: { type: String, lowercase: true, trim: true } },
});
验证
const breakfastSchema = new Schema({
eggs: {
type: Number,
// Number有数值范围验证器 min 和max
min: [6, "鸡蛋太少"],
max: 12,
},
drink: {
type: String,
// String有enum和match
enum: ["咖啡", "茶"],
},
});
完整的字段验证链接
Mongoose v7.4.2: Validation (mongoosejs.com)
。。。还有很多的操作,例如查询、删除等
架设MongoDB数据库
在本地创建了一个library数据库
查看已经安装了的依赖
D:\library>npm ls
library@0.0.0 D:\library
+-- cookie-parser@1.4.6
+-- debug@2.6.9
+-- express@4.16.4
+-- http-errors@1.6.3
+-- mongoose@7.4.2
+-- morgan@1.9.1
`-- pug@2.0.0-beta11
连接MongoDB
// 设置 Mongoose 连接
const mongoose = require("mongoose");
const mongoDB = "在此插入数据库_URL";
mongoose.connect(mongoDB, { useNewUrlParser: true, useUnifiedTopology: true });
mongoose.Promise = global.Promise;
const db = mongoose.connection;
db.on("error", console.error.bind(console, "MongoDB 连接错误:"));
上述代码的详解已注释


