为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第5天 Node.js工程师学习笔记

课程章节: Node 框架实战篇 - 项目数据持久化存储

课程讲师: 北瑶

课程内容:

什么是 MongoDB
  • 官方文档: https://www.mongodb.com/
  • MongoDB 是由 c++ 语言编写的, 是一个基于分布式文件存储的开源 NoSQL 数据库系统
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富, 最像关系数据库的, 这会让曾经使用过关系型数据库的人比较容易上手
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
  • MongoDB 的查询功能非常强大
    • 不仅支持大部分关系型数据库中的单表查询,还支持范围查询、排序、聚合、MapReduce 等
    • MongoDB 的查询语法类似于面相对象的程序语言
安装 MongoDB

目前版本6.0.1, 与5.x版本不同

Mongo Shell 执行环境

MongoDB 的命令行链接工具 mongo shell ,提供了 JavaScript 执行环境,内置了一些数据库操作命令
show dbs 查看当前数据库列表
db 查看当前所在数据库
use xxx 切换到xxx数据库
show collections 显示库中的所有集合
等等……,提供了一大堆的内置 API 用来操作数据库
退出连接:exitquit()Ctrl + C

MongoDB 中的数据存储结构

由于 MongoDB 是文档型数据库,其中存储的数据就是熟悉的 JSON 格式数据。

  • 可以把 MongoDB 数据库想象为一个超级大对象
  • 对象里面有不同的集合
  • 集合中有不同的文档
数据库

在 MongoDB 中, 数据库包含一个或多个文档集合

查看数据库列表

show dbs

查看当前数据库

db
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

  • admin : 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息
创建/切换数据库

use 数据库名
在 MongoDB 中数据库只有真正的有了数据才会被创建出来
你可以切换到不存在的数据库。首次将数据存储在数据库中(例如通过创建集合)时,MongoDB 会创建数据库。例如,以下代码在 insertOne() 操作期间创建数据库 myNewDatabase 和集合 myCollection:
use myNewDatabase
db.myCollection.insertOne({ x: 1, y: 2 });

数据库名称规则
  • 不区分大小写,但是建议全部小写
  • 不能包含空字符。
  • 数据库名称不能为空
  • 数据库名字不能有特殊字符: /\. "$*<>:|?
删除数据库
  • 使用 use 命令切换到要删除的数据库(自杀)
  • 使用db.dropDatabase() 删除当前数据库
集合

集合类似于关系数据库中的表,MongoDB 将文档存储在集合中。

创建集合

如果不存在集合,则在您第一次为该集合存储数据时,MongoDB 会创建该集合。
db.集合名.insert({x: 1})
MongoDB提供db.createCollection(name, options) 方法来显式创建具有各种选项的集合, 列如设置最大大小或文档验证规则. 如果未指定这些选项, 则无需显式创建集合, 因为首次存储集合数据时, MongoDB 会创建新集合。

查看集合

show collections

删除集合

db.集合名称.drop()

使用 db.集合名称.find()查看集合中的文档数据

_id字段

在 MongoDB 中,存储在集合中的每个文档都需要一个唯一的 _id 字段作为主键。如果插入的文档省略 _id 字段,则 MongoDB 驱动程序会自动为 _id 字段生成 ObjectId

  • 默认情况下,MongoDB 在创建集合时会在 _id 字段上创建唯一索引。
  • _id 字段始终是文档中的第一个字段
  • _id 字段可以包含任何 BSON 数据类型的值,而不是数组。
  • 可以自定义传入,但是非常不建议
插入文档

插入单个文档

db.cc.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)

插入多个文档

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
插入行为
  • 集合创建
    如果该集合当前不存在,则插入操作将创建该集合。
  • _id 字段
    在 MongoDB 中,存储在集合中的每个文档都需要一个唯一的 _id 字段作为主键。如果插入的文档省略 _id 字段,则 MongoDB 驱动程序会自动为 _id 字段生成 ObjectId。
查询文档

查询所有文档
db.集合名.find({})
等价于 SQL 中的 SELECT * FROM inventory 语句。

相等条件查询
db.集合名.find({ status: "D" })
等价于 SQL 中的 SELECT * FROM inventory WHERE status = "D" 语句。

查询运算符
更新文档

单个
db.collection.updateOne()
多个
db.collection.updateMany()

删除文档

单个
db.inventory.deleteMany({ status : "A" })
多个
db.inventory.deleteOne( { status: "D" } )

链接 MongoDB

安装: npm install mongodb 安装mongoDB 链接模块

const {
  MongoClient
} = require('mongodb'); // 导入

// 初始化链接对象
const client = new MongoClient('mongodb://127.0.0.1:27017');
// 链接操作是异步执行的,可以使用异步处理方法
const main = async () => {
  // 创建链接
  await client.connect();
  // 指定链接的数据库名
  const db = client.db('mytest');
  // 链接数据库中的执行集合
  const cc = db.collection('cc');
  // 操作集合中的文档数据
  let d = await cc.find();
  console.log(await d.toArray());
}
// 断开链接
main().finally(() => client.close());

学习心得

通过这章的学习, 学会了 服务端与SQL的链接与交互, 掌握了 mongoDB 基本指令

课程截图

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消