一文学会mongoose如何对mongoDB进行增删改查

170 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

参考文献

起步

  • 安装

    npm i mongoose
    
  • 简单示例

    const mongoose = require('mongoose')
    
    mongoose.connect('mongodb://localhost/test', { useMongoClient: true })
    
    mongoose.Promise = global.Promise
    // 创建一个模型(就是在设计数据库)
    // MongoDB 是动态的,非常灵活,只需要在代码中设计数据库就可以了
    // mongoose 这个包就可以让设计编写过程变的非常的简单
    let Cat = mongoose.model('Cat', { name: String })
    // 实例化一个 Cat
    let kitty = new Cat({ name: 'Zildjian' })
    // 持久化保存 kitty 实例
    kitty.save(err => {
      if (err) {
        console.log(err)
      } else {
        console.log('meov')
      }
    })
    

官方指南

设计 Scheme 发布 model

const mongoose = require('mongoose')

const Schema = mongoose.Schema

mongoose.connect('mongodb://localhost/test')
// 设计文档结构
let userSchema = new Schema({
  username: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  email: {
    type: String
  }
})
// 将文档结构发布为模型
// mongoose.model 方法就是用来将一个架构发布为 model
// 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称,mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称(User → users)
// 返回值:模型构造函数
let User = mongoose.model('User', userSchema)

增加数据

const mongoose = require('mongoose')

const Schema = mongoose.Schema

mongoose.connect('mongodb://localhost/test')

let userSchema = new Schema({
  username: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  email: {
    type: String
  }
})

let User = mongoose.model('User', userSchema)
// 增加数据
let admin = new User({
  username: 'admin',
  password: '123456',
  email: 'admin@admin.com'
})

admin.save(err => {
  if (err) {
    console.log('储存失败')
  } else {
    console.log('储存成功')
  }
})

查询数据

// 查询所有数据
User.find({
  username: '张三'
}, (err, data) => {
  if (err) {
    console.log('查询失败')
  } else {
    console.log(data)
  }
})
// 按照条件查询所有符合条件的数据
User.find({
  username: '张三'
}, (err, data) => {
  if (err) {
    console.log('查询失败')
  } else {
    console.log(data)
  }
})
// 只查找符合条件的第一个,返回一个对象形式
User.findOne({
  username: '张三'
}, (err, data) => {
  if (err) {
    console.log('查询失败')
  } else {
    console.log(data)
  }
})
// 或条件查询
User.findOne({
  $or: [
    {
      email: body.email
    },
    {
      nickname: body.nickname
    }
  ]
}, (err, data) => {
  if (err) {
    return res.status(500).send('Server Error')
  }
})

删除数据

// 按照条件删除对应的数据
User.remove({
  username: '张三'
}, (err, data) => {
  if (err) {
    console.log('查询失败')
  } else {
    console.log(data)
  }
})
// 根据条件删除一条数据
User.findOneAndRemove({
  username: '张三'
}, (err, data) => {
  if (err) {
    console.log('查询失败')
  } else {
    console.log(data)
  }
})
// 根据 id 删除一条数据
User.findByIdAndRemove(id, [option], [callback])

更新数据

// 根据条件更新所有数据
User.findByIdAndUpdate('id', (err, data) => {
  if (err) {
    console.log('更新失败')
  } else {
    console.log(data)
  }
})
// 根据指定条件更新一个
User.findOneAndupdate([conditions], [update], [options], [callback])
// 根据 id 更新一个
User.findByIdAndUpdate(id, {
  password: '123'
}, (err, ret) => {
  if (err) {
    console.log('更新失败')
  } else {
    console.log('更新成功')
  }
})