基础知识
-
客户端 - 服务端 - 数据库
-
程序都是运行在内存中的,例如存储用户名密码,我们可以 js 存为一个对象,但当程序结束或断电,内存会被释放,数据丢失。所以我们必须存到磁盘中。
-
我们可以存在数据库中,也可以存一个文件,通过 nodejs 的读写操作。但是没有数据库强大稳定好用。
-
数据库就是用来存储程序运行期间所有一些你想永久保存下来的数据
数据库分类
-
关系型数据库
-
非关系型数据库(No SQL not only sql)
区别:
关系型数据库 | 非关系型数据库 |
---|---|
关系型数据库中存在各种个样表,通过 SQL 语言操作数据库 SQL:结构化查询语言 | 键值对,文档数据库 文档:类似 JSON 结构,简单理解 mongodb 中存的都是 json(bson) bson:二进制加强版json,当成json就行了 |
mysql sql DB2 | MongoDB |
开发慢,修改难 | 快速简单,为快速开发 web 应用而生 |
数据库
- 数据库的服务器
用来保存数据 - 客户端
操作数据。要操作数据库,必须启动服务器。一个数据库服务器里可以有多个数据库,一个数据库里有多个集合,一个集合里有多个文档。我们操作的是文档
数据库表示为一个圆柱图片
MongoDB
mongoDB在官网有 web 体验版
安装
- windows
- https://www.mongodb.com/download-center/community
- 安装 记住安装目录,到 bin 目录
- 添加环境变量 用户的 path 新增上到 bin 的 path
- cmd 直接输入 mongo,报错说明环境变量配置有问题
- 在 c 盘根目录创建文件夹 data/db 作为数据库默认文件夹
- 打开 cmd 输入 mongod 启动 mongodb 服务器。提示 waiting for connections on port xxx
- 最小化 cmd ,新打开一个 cmd 再输入 mongo,提示connecting to :test 连接成功
偶数稳定奇数开发版。mongdb对 32 位支持很烂(可以说不怎么支持)
- mac
https://blog.csdn.net/weixin_43972437/article/details/100671337
安装结束后直接 mongo 就可以了
mongod 启动服务器
mongo 启动客户端
基础配置
- 自启动 win10 和 mac 默认,win7需要设置
命令
mongodb 默认不支持http协议访问,但是在 url 上输入 localhost:27012有反应说明启动成功
端口最大 65535
mongod --dbpath /data/db --port 10086:测试失败
在monodb中集合和数据库不需要手动创建,会在第一次在数据库中插入文档时自动创创建
命令 | 说明 |
---|---|
show dbs | 显示所有数据库 |
use xx | 进入指定数据库 |
db | 显示当前数据库 |
show collections | 显示数据库中所有集合 |
CRUD | 增删改查 |
db.collection.insert() | 插入任意个 |
db..insertOne(doc) | 向指定集合中插入一个文档 |
db..insertMany() | 插入多个,传数组 |
db.<>.find() 或 db.inventory.find( {} ) | 查询集合所有文档,返回数组 |
db.collection.find(query) | 条件查询,接受一个{},返数组 |
如果层级过多query可以像对象一样查询 find( “hobby.movies”:“hero”) | 但是需要引号包围,:不是=,是包含 hobby:{movies:[‘hero’,]} |
db.collection.findOne(query) | 返文档 |
db.colleciton.find().count() | 返回查询结果的数量 |
db.collection.find().length() | 返长度 一般用 count() 区别为止 |
db.colleciton.update(query, update) | update 新对象替换 query 对象,默认只修改第一个 |
db.colleciton.update(query, updata, {}) | 修改多个 |
db.colleciton.update(query, {$set: {key: value}}) | 修改或添加属性 $set 操作符 $push 用于数组插入 |
$unset: {key: value} | 删除属性,需要传个对象 |
db.<>.remove(query, options) | 默认删除所有 query 出来的,如果只删一个,options 为 true |
db.<>.drop() | 删除集合 |
db.<>.remove({}) | 清空集合,集合还在 |
db.dropDatabase() | 删库 |
向集合中插入文档时,如果没有自定义 _id,就根据时间戳和机器码生成一个独一无二的 id
ObjectId()
insert时候一般传入字段来控模拟一个是否删除的状态,而不是真正的删除。在查询的时候通过条件判断来控制是否查出来
文档的属性值可以也是一个文档,这种叫内嵌文档(对象属性值也是对象)