mongoose学习笔记

快速上手

前提

安装 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

你可能感兴趣的:(mongoose学习笔记)