快速上手
前提
安装 MongoDB 和 Node.js
本次学习的 mongoose 版本是 5.4
MongoDB教程
Mongoose中文文档
Mongoose英文文档
安装
npm i -S mongoose
连接本地数据库
const mongoose = require('mongoose)
mongoose.connect('mongodb://localhost:27017/test', {
useNewUrlParser: true // 允许用户在新解析器中发现错误时回退到旧解析器
})
打印链接状态
let db = mongoose.connection
db.on('error', console.error.bind(console, 'connection error'))
db.once('open', () => console.log('数据库链接成功!'))
工程中应用
配置
在实际工程中,需要将数据库配置的脚本单独分离出来:
如上图,新建 database 文件夹,新建 db.js 文件:
const mongoose = require('mongoose')
const mongoPath = 'mongodb://localhost:27017/test'
// 配置信息
const options = {
useNewUrlParser: true, // 允许用户在新解析器中发现错误时回退到旧解析器
}
mongoose.connect(mongoPath, options, (err) => {
if (err) {
return console.log(err)
}
console.log('数据库链接成功!')
})
module.exports = mongoose
新建我们需要操作数据的脚本,这里新建了 tank.js 来操作关于坦克的数据:
const mongoose = require('./db')
// 创建数据模式
const userSchema = new mongoose.Schema({
name: String,
size: String,
status: {
type: String,
default: 'new' // 默认值
}
})
// 创建数据模型,对应数据库中的集合(collection)
const Tank = mongoose.model('Tank', userSchema)
module.exports = Tank
在根目录 index.js 中加载脚本:
const Tank = require('./database/tank')
这时候我们就可以直接操作数据库进行增删改查了。
增删改查
创建数据
// 方法一
let tank = new Tank({
name: 'T90',
size: 'big'
})
tank.save((err) => {
if(err) return console.log(err)
console.log('数据写入成功!')
})
// 方法二
Tank.create({ name: 'TS-001',size: 'small' }, (err, tank) => {
if (err) return console.log(err)
console.log(tank)
})
查询数据
Tank.find({ name: 'T90' }, (err, result) => {
if (err) return console.log(err)
console.log(result)
})
删除数据
Tank.deleteOne({_id: '5c613006d38e8126d068d952'}, (err, result) => {
if (err) return console.log(err)
console.log(result)
})
修改数据
Tank.updateOne({_id: '5c613006d38e8126d068d952'}, {size: 'middle'}, (err, result) => {
if (err) return console.log(err)
console.log(result)
})
自定义修饰符
在定义 Schema 时,可以设置一些条件,来限制数据的格式,或在提交数据时,对数据进行改变
例:
let tankData = {
name: 'CS-001',
size: 'small',
info: ' 123123 '
}
Tank.create(tankData, (err, tank) => {
if (err) return console.log(err)
console.log(tank)
})
比如我们需要给坦克添加一些说明信息,这里的字符串前后都存在许多空格,如果不对字符串进行处理,我们提交后的数据是这样的:
{
"_id": "5c6199882252d619ac799cdd",
"status": "new",
"info": " 123123 ",
"name": "CS-001",
"size": "small",
"__v": 0
}
这时就需要对数据进行格式化:
const userSchema = new mongoose.Schema({
name: String,
size: String,
status: {
type: String,
default: 'new'
},
info: {
type: String,
default: '',
trim: true
}
})
我们做如上配置,使数据再提交时,自动删除前后空格,获得效果如下:
{
"_id": "5c619c5493b94f0cd06ebc73",
"status": "new",
"info": "123123",
"name": "CS-001",
"size": "small",
"__v": 0
}
更多配置,参考 SchemaTypes