美文网首页
mongoose学习笔记

mongoose学习笔记

作者: 地平线0530 | 来源:发表于2019-02-12 00:23 被阅读0次

    快速上手

    前提

    安装 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学习笔记

          本文链接:https://www.haomeiwen.com/subject/wnzceqtx.html