MongoDB基础【学习笔记】

一、数据库分类

  • 关系型数据库(RDBMS)
    • MySQL、Qracle、DB2、SQL Server ...
    • 关系数据库中全部是表
  • 非关系型数据库(NoSQL Not Only SQL)
    • MongoDB、Redis ...
    • 键值对数据库
    • 文档数据库MongoDB

二、MongoDB

1、简介

  • MongoDB 是为快速开发物联网 Web 应用而设计的数据库系统。
  • MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。
  • MongoDB 的数据模型是面向文档的,所谓文档是一种类似 JSON 的结构。(BSON)

2、三个概念

  • 数据库(database)
    数据库是一个仓库,在仓库中可以存放集合
  • 集合(collection)
    集合类似数组,在集合中可以存放文档
  • 文档(document)
    文档数据库中最小的单位,我们存储和操作的内容都是文档

3、下载

4、安装

  • 安装包默认安装

  • 配置环境变量

  • 在C盘创建文件夹 data;在 data 中创建文件夹 db;

  • 打开 cmd 命令行窗口,输入 mongod 启动 mongdb 服务器

    (如果是 32位 系统,则输入 mongod --storageEngine=mmapvl) 在其它数据库启动并且自定义端口:mongod --dbpath 数据库路径 --port 端口号(最大不要超过 65535)`

  • (MongoDB6.0 以后做出了重大改变,MongoDB 已经不再默认安装 shell 工具)

  • 再打开一个 cmd 窗口,输入 mongosh,出现 test>

  • (针对 MongoDB 6.0)以前的版本)将 MongoDB 设置为系统服务,可以自动在后台启动

    • 在 data 下创建 db 和 log 文件夹

    • 在 bin 所在目录下添加一个配置文件:mongod.cfg

    • 以管理员的身份打开命令行窗口,执行命令:
      sc.exe create MongoDB binPath= "\"C:\Program Files\{``{ mongod 的 目录 }}\bin\mongod.exe\" --service --config=\"C:\Program Files\{``{ mongod 的 目录 }}\mongod.cfg\"" DisplayName="MongoDB" start= "auto"

    • 启动 mongodb service

    • 如果启动失败,则在控制台输入 sc delete MongoDB 删除之前配置的服务,再重新开始配置

三、基本操作

1、基本概念

  • 数据库(database)
  • 集合(collection)
  • 文档(document)

在 MongoDB 中,数据库和集合都不需要手动创建。当创建文档时,如果文档所有的集合或数据库不存在会自动创建数据库和集合。

MongoDB 的文档的属性值也是一个文档,当一个文档的属性值是一个文件时,我们将这个文档叫做内嵌文档;

MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档可以通过 . 的形式来匹配,此时属性名必须使用引号。

2、基本指令

  • show dbsshow databases:显示当前的所有数据库
  • use 数据库名:进入到指定的数据库中
  • db:表示的是当前所处的数据库
  • show collections:显示数据库中所有的集合

3、数据库的 CRUD(增删改查) 的操作

  • db.<collection>.insert(doc):向集合中插入一个或多个文档

    • 当向集合中插入文档时,如果没有指定 _id 属性,则数据库会自动为文档添加 _id。该属性作为文档的唯一标识
    • db.collection.insertOne():插入一个文档对象
    • dn.collection.insertMany():插入多个文档对象(参数必须是数组)
  • db.<collection>.find():查询当前集合中所有的文档,find() 可以接受一个对象作为条件参数

    • {}表示查询集合中所有文档
    • {属性: 值}查询属性是指定值的文档
    • find() 返回的是一个数组

    db.<collection>.findOne():用来查询集合中符合条件的第一个文档

    • findOne() 返回的是一个对象

    db.<collection>.find({}).count():查询所有结果的数量

    db.<collection>.find().limit(n):设置显示数据的上限

    db.<collection>.find().skip(n):跳过指定数量的数据

    • db.<collection>.find().skip((页码 - 1) * 每页显示的条数).limit(每页显示的条数)
    • MongoDB 会自动调整 skip 和 limit 的位置
  • db.<collection>.updateOne(查询条件, 新对象):修改

    • update() 默认情况下会使用新对象来替换旧的对象,如果要修改指定的属性,而不是替换则要使用"修改操作符":
      • $set:可以用来修改文档中的指定属性
      • $unset:可以用来删除文档的指定属性
      • $push:用于向数组中添加一个新的元素
      • $addToSet:向数组中添加一个新元素,如果数组中已经存在该元素,则不会添加
    • 默认只会修改一个文档

    db.<collection>.updateMany():同时修改多个符合条件的文档

    db.<collection>.replaceOne():替换一个符合条件的文档

  • db.<collection>.remove()

    • remove() 可以根据条件删除文档,传递的条件方式与 find() 类似,删除所有符合条件的文档(默认情况下)。如果 remove() 第二个参数传递一个 true,则只会删除一个
    • 如果只传递一个空对象作为参数,则会删除集合中的所有文档(性能较差)

    db.<collection>.deleteOne()

    db.<collection>.deleteMany()

    db.<collection>.drop():删除集合

4、sort

查询文档时,默认情况时按照 _id 的值进行排列的(升序)

sort() 可以用来指定文档的排序的规则,sort() 需要传递一个对象来指定排序规则:1 -> 升序 // -1 -> 降序

limit、skip、sort 可以任意排序

5、投影

在查询时,可以在第二个参数位置来设置查询结果

四、文档间的关系

1、single to single

在 MongoDB 中可以通过内嵌文档的形式来体现出 single to single 的关系

2、one-to-many / many-to-one

同样可以通过内嵌文档来映射一对多的关系

3、many-to-many

利用各个集合之间的 _id 建立联系

五、Mongoose

1、简介

  • Mongoose 是一个可以通过 Node 操作 MongoDB 的模块
  • Mongoose 是一个对象文档模型(ODM)库

2、好处

  • 可以为文档创建一个模式结构(Schema)
  • 可以对模型中的对象/文档进行验证
  • 数据可以通过类型转换转换为对象模型
  • 可以使用中间件来应用业务逻辑挂钩
  • 比 Node 原生的 MongoDB 驱动更容易

3、新的对象

  • Schema(模式对象)
    定义约束了数据库中的文档结构
  • Model
    Model 对象作为集合中的所有文档的表示,相当于 MongoDB 数据库中的集合 collection
  • Document
    表示集合中的具体文档,相当于集合中的一个具体文档

4、使用 Mongoose

  1. 下载安装 Mongoose
    npm i mongoose --save
  2. 在项目中引入 mongoose
    const mongoose = require("mongoose");
  3. 连接 MongoDB 数据库
    mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名');
    如果端口号时默认端口号(27017)则可以省略
  4. 监听 MongoDB 数据库的连接状态
    通过监视 mongoose.connection 可以监听数据库的连接与断开
    mongoose.connection.once("open/close", function() {})
  5. 断开连接(一般不使用)
    mongoose.disconnect()

5、Schema 和 Model

  • 创建 Schema 对象

    js 复制代码
    const Schema = mongoose.Schema;
    const stuSchema = new Schema({
        name: String,
        age: Number,
        gender: {
            type: String,
            default: "female"
        },
        address: String
    });
  • 通过 Schema 创建 Model

    js 复制代码
    const StuModel = mongoose.model("student", stuSchema);
    StuModel.create({
        name: "白骨精",
        age: 16,
        gender: "female",
        address: "白骨洞"
    }).then(() => {
        console.log("插入成功!");
    })

6、Model 的方法

  • Model.create(doc(s)):用来创建一个文档并添加到数据库中

    • doc(s):可以是一个文档对象,也可以是一个文档对象的数组
  • Model.find(conditions, [projection], [options]);:查询所有条件的文档,返回一个数组

    Model.findById(id, [projection], [options]);:根据文档的 id 属性查询文档

    Model.findOne([conditions], [projection], [options]);:查询符合条件的第一个文档

    • conditions:查询的条件
    • projection 投影 需要获取到的字段
      • {name: 1, _id: 0}
      • "name -_id"
    • options:查询选项(skip、limit...)
  • Model.update(conditions, doc, [options]);

    Model.updateMany(conditions, doc, [options]);

    Model.updateOne(conditions, doc, [options]);

    Model.replaceOne(conditions, doc, [options]);

  • Model.deleteOne(conditions);

    Model.deleteMany(conditions);

  • Model.count(conditions);:统计文档的数量

7、document 的方法

  • Model#save([options])
  • document.updateOne(update, [options]):修改对象
  • document.deleteOne():删除对象
  • document.get(name):获取文档中的指定属性值
  • document.set():设置文档的指定属性值
  • document.id:获取文档的 _id 属性值
  • document.toJSON():转换为一个 JSON 对象
  • document.toObject():把 document 对象转换成一个 普通的 JSON 对象
相关推荐
暮毅3 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
lulu_gh_yu13 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!32 分钟前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚36 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
听忆.1 小时前
手机屏幕上进行OCR识别方案
笔记
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
Selina K1 小时前
shell脚本知识点记录
笔记·shell
2 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
ctrey_2 小时前
2024-11-4 学习人工智能的Day21 openCV(3)
人工智能·opencv·学习
啦啦右一2 小时前
前端 | MYTED单篇TED词汇学习功能优化
前端·学习