MongoDB是目前最流行的NoSQL数据库之一。MongoDB和Node.js特别般配,因为MongoDB是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改查等管理数据库的命令和JavaScript语法很像。
以下是使用macOS安装方法:
来源: https://www.runoob.com/mongodb/mongodb-osx-install.html
# 进入 /usr/local
cd /usr/local
# 下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz
# 解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz
# 重命名为 mongodb 目录
sudo mv mongodb-osx-x86_64-4.0.9/ mongodb
# 创建日志及数据存放的目录:
# 数据存放路径:
sudo mkdir -p /usr/local/var/mongodb
# 日志文件路径:
sudo mkdir -p /usr/local/var/log/mongodb
# 接下来要确保当前用户对以上两个目录有读写的权限:
sudo chown springleo /usr/local/var/mongodb # springleo是你本机用户
sudo chown springleo /usr/local/var/log/mongodb
# 安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
export PATH=/usr/local/mongodb/bin:$PATH
# 使用以下命令在后台启动 mongodb:
sudo mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log
cd /usr/local/mongodb/bin
./mongo
在mongodb中基本的概念是数据库、集合、文档。下表将帮助更容易理解Mongodb中的一些概念:
SQL概念 | MongoDB概念 | 解释 |
---|---|---|
database | database | 数据库。一致 |
table | collection | 数据库表 |
row | document | 数据库表一行 |
column | field | 数据库表一列 |
primary key | primary key | 主键。mongodb默认有主键_id |
table joins | 表连接。mongodb不支持 |
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
db.col.find({}).limit(5).skip(1).sort({"likes":-1})
// 批量删除
db.getCollection('cainiao-pref-statistic').deleteMany({ds: 20210715})
// 查询
db.getCollection('cainiao-pref-statistic').find({ ds: { '$gte': 20210716, '$lte': 20210717 } }).count()
db.getCollection('cainiao-pref-statistic').find({ })
// 更改状态
db.getCollection('cainiao-pref-statistic').find({ }).forEach(function(obj) {
obj.ds = new NumberInt(obj.ds);
obj.total = new NumberInt(obj.total);
db.getCollection('cainiao-pref-statistic').save(obj);
});
在mongodb中,Collection类似于传统SQL的table;Document类似于SQL中的一行记录row;Field类似于SQL中的一列column。
Mongoose是在node下对MongoDB进行管理的数据对象模型(ODM)库。它管理着数据结构定义、校验、数据之间的关系,并可以使node数据转换成mongodb数据库数据。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
const Cat = mongoose.model('Cat', { name: String });
const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));
定义document的结构、默认值、校验等。是一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
。支持schema.pre('save', ...)钩子函数(当model.save()执行时触发);支持schema.plugin()以使用自定义插件。
Schema Type支持如下类型:
Schema API
Model是Schema的包装,具有操作数据库的能力
。
Model API
Schema类似于SQL的表的定义;Model是一个高层次的接口
let mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/test') // 记得先连接到数据库
/** 定义表结构 **/
let emailSchema = new mongoose.Schema({
email: String,
date: Date
})
// 回调钩子
emailSchema.pre('save', function(next) {
if(!this.date) this.date = new Date() // this指向Schema
next()
})
// 定义Model静态方法
emailSchema.statics.getLeoRows = function() {
return this.find({author: 'leo'}) // this指向Model
}
/** 定义操作层 **/
let EmailModel = mongoose.model('Email', emailSchema)
// 静态方法,常用于数据库逻辑
EmailModel.getLeoRows().then(data => console.log(data))
// 新增
let msg = new EmailModel({
email: 'leo'
})
msg.save().then(doc => console.log(doc))
// 查询
EmailModel.find({ email: 'leo' }).then(doc => console.log(doc))
// 更新
EmailModel.findOneAndUpdate({ email: 'leo' },{ email: 'leoupdate' }.then(doc => console.log(doc))
// 删除
EmailModel.findOneAndRemove({ email: 'leoupdate'}).then(doc => console.log(doc))
安装mysql:https://dev.mysql.com/doc/refman/8.0/en/osx-installation-pkg.html
命令行操作msql:
/usr/local/mysql/bin/mysql -u root -p # 输入root密码后即可进入mysql
# 接下来可操作或设置mysql
mysql> SHOW DATABASES;
mysql> CREATE DATABASE pets;
mysql命令入口,MacOS默认地址为:/usr/local/mysql/bin/mysql。所以我们可以更改下终端的Path快捷设置(笔者使用oh my zsh),这样就不用输入路径了:
vim ~/.zshrc
export PATH=$HOME/bin:/usr/local/bin:$PATH:/usr/local/mysql/bin # :代表间隔
mysql -u root -p