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 连接错误:"));

上述代码的详解已注释