node中使用mongoose库进行数据的增删改查

918 阅读3分钟

上篇文章讲过MongoDB的一些概念,这篇文章想要来聊聊MongoDB在node中的使用。

node中使用MongoDB

node中使用MongoDB有两种方法

  • 使用mongodb包来操作:mongodb
  • 使用第三方mongoose来操作mongodb数据库

在这里我就讲述一下mongoose的使用

  • Schema表定义模板
  • Model类似关系数据库表
  • instance类似记录,由Model创建的实体。

1、下载mongoose第三方包

npm i mongoose --save

2、demo.js进行测试

const mongoose = require('mongoose');

// 连接mongodb数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true});

// 创建一个模型
// 就是在设计数据库
// MongoDB是动态的,非常灵活,只需要在代码中设计你的数据库就可以了
// mongoose这个包就可以让你的设计编写过程变得非常简单
const Cat = mongoose.model('Cat', { name: String });

for(let i=0; i<100; i++) {
  // 实例化一个Cat
  const kitty = new Cat({ name: 'Zildjian' + i });

  // 持久化保存kitty实例
  kitty.save().then(() => console.log('meow'));
}

Schema

想了解更多,参考文档Schema

Schema之所以能定义documents,是因为它可以限制输入的字段以及类型,mongoose支持的基本类型有:

  • String
  • Number
  • Boolean
  • Date
  • Buffer
  • Objectld
  • Array
  • Mixed

SchemaType

  • require:必选验证器,默认值为false
  • default:任何值或者函数设置此路径为默认值。
  • enum: 枚举。
  • select:布尔值,指定query的默认projections
  • get
  • set
  • ...

设计文档结构

当了解Schema后,可对上述demo进一步操作

const mongoose = require('mongoose')
const Schema = mongoose.Schema

// 1、连接数据库
// 指定连接的数据库不需要已经存在,会在插入第一条数据之后自动被创建
mongoose.connect('mongodb://localhost/test')

// 2、设计文档结构(表结构)
// 字段名称就是表结构中的属性名称
// 约束的目的是为了保证数据的完整性,不要有脏数据

let useSchema = new Schema({
  username: {
    type: String,
    require: true 
  },
  password: {
    type: String,
    require: true
  },
  email: {
    type: String,
    require: false
  }
})

// 3、将文档架构发布为模型
// mongoose.model方法就是用来将一个架构发布于model的
// 第一个参数: 传入一个大写名词单数字符串用来表示你的数据库名称
//              mongoose会自动将大写名称的字符串生成小写复数的集合名称
//              例如这里的User会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
const User = mongoose.model('User', useSchema);

对数据进行操作

当有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据增删改查

增加数据

const admin = new User({
  username: 'admin',
  password: '12345',
  email: '123@123.com'
})

admin.save(function(err, ret) {
  if (err) {
    console.log('保存失败')
  } else {
    console.log('保存成功')
    console.log(ret)
  }
})

查询数据

查询所有

User.find((err, ret) => {
  if (err) {
    console.log('查询失败')
  } else {
    console.log('查询成功')
    console.log(ret)
  }
})

按条件查询所有,其中还可以根据id查询findById()

User.find({
  username: 'lisi'
}, (err, ret) => {
  if (err) {
    console.log('查询失败')
  } else {
    console.log('查询成功')
    console.log(ret)
  }
})

按条件查询单个,也就是满足查询条件中的第一个

User.findOne({
  username: 'lisi'
}, (err, ret) => {
  if (err) {
    console.log('查询失败')
  } else {
    console.log('查询成功')
    console.log(ret)
  }
})

删除数据

可以根据id进行删除findByIdAndDelete

User.remove({
  username: 'lisi'
}, (err, ret) => {
  if (err) {
    console.log('删除失败')
  } else {
    console.log('删除成功')
    console.log(ret)
  }
})

更新数据

根据id进行更新

User.findByIdAndUpdate('5e301d22955ca339cc7e6ad0', {
  password: '123'
}, (err, ret) => {
  if (err) {
    console.log('更新失败')
  } else {
    console.log('更新成功')
    console.log(ret)
  }
})

参看文档

想要了解,请参考 mongoose docs

注:此文为本人学习过程中的笔记记录,如果有错误或者不准确的地方请大佬多多指教~