欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MongoDB增删改查操作

程序员文章站 2022-07-10 10:38:40
...

1. 创建集合

  • 创建集合分两步, 一是对集合设定规则, 二是创建集合, 创建mongoose.Schema构造函数的实例即可创建集合。
const mongoose = require('mongoose')

// 数据库连接
mongoose.connect('mongodb://localhost/playground')
  .then(() => console.log('数据库连接成功'))
  .catch(err => console.log(err, '数据库连接失败'))

  // 创建集合规则
const courseSchema = new mongoose.Schema({
  name: String,
  author: String,
  isPublished: Boolean
})

// 使用规则创建集合
// 1. 集合名称
// 2. 集合规则
const Course = mongoose.model('Course', courseSchema) // 集合实际的名字是courses

MongoDB增删改查操作

  • 查看数据库的相关数据, 可下载MongoDB Compass配合使用
  • 下载地址: https://www.mongodb.com/products/compass

2. 创建文档

2.1 创建文档第一中方式

  • 创建文档实际上就是向集合中插入数据
  • 分为两步:
    1. 创建集合实例.
    2. 调用实例对象下面的save方法将数据保存到数据中.
// 和上面的代码一起运行
// 创建文档
const course = new Course({
  name: 'node.js',
  author: 'zhangsan',
  isPublished: true
})

// 将文档插入到数据库中
course.save()

结果:
MongoDB增删改查操作

2.2 创建文档的第二种方式

// 回调函数
Course.create(
  {
    name: 'JavaScript',
    author: 'lisi',
    isPublished: true
  },
  (err, result) => {
    console.log(err)
    console.log(result)
  } 
)

// promise对象
Course.create({name: 'Vue.js', author: 'lisi', isPublished: true})
  .then(result => console.log(result))

3. MongoDB数据库导入数据

  • 在插入数据之前要先配置环境变量
    • 找到MongoDB的安装目录下的bin, 把bin配置到系统环境变量path中
  • mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件

4. 查询文档

4.1. 先创建文档

const mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true })
  .then(() => console.log('数据库连接成功'))
  .catch(err => console.log(err, '数据库连接成功'))

const userShema = new mongoose.Schema({
  name: String,
  age: Number,
  email: String,
  password: String,
  hobbies: [String]
})

const User = mongoose.model('User', userShema)

// 创建多条文档
// User.create({
//   name: '血衣侯',
//   age: 25,
//   email: 'aaa@qq.com',
//   password: 123456,
//   hobbies: ['舞剑', '练剑']
// })
//   .then(result => console.log(result))
User.create({
//   name: 'zhangsan',
//   age: 35,
//   email: 'aaa@qq.com',
//   password: 123456,
//   hobbies: ['JavaScript', 'nodejs', 'Vue.js']
// })
//   .then(result => console.log(result))
User.create({
  name: '卫庄',
  age: 18,
  email: 'aaa@qq.com',
  password: 123456,
  hobbies: ['舞剑', '练剑']
})
  .then(result => console.log(result) )

4.2. 按条件查询文档

// 查询用户集合中的所有文档
User.find().then(result => console.log(result))

// 通过_id字段查找
User.find({_id: '5f1134b28ecdf026285b4d9b'}).then(result => console.log(result))

// 返回一条文档, 默认返回当前集合中的第一条文档
User.findOne().then(result => console.log(result))

// 根据条件查找文档
User.findOne({name: '卫庄'}).then(result => console.log(result))

4.3. 匹配大于 小于

// 查询用户集合中年龄字段大于18并且小于25的文档
// $gt(大于) $lt(小于)
User.find({age: {$gt: 18, $lt: 25}}).then(result => console.log(result))

4.4 匹配包含

User.find({hobbies: {$in: ['nodejs']}}).then(result => console.log(result))

4.5. 选择要查询的字段

User.find().select('name email -_id').then(result => console.log(result))

4.6. 排序

// 将数据按照年龄进行升序排列
User.find().sort('age').then(reslut => console.log(reslut))

// 将数据按照年龄进行降序排列
User.find().sort('-age').then(reslut => console.log(reslut))

4.7. skip 跳过多少条数据 limit限制查询数量

User.find().skip(2).limit(2).then(result => console.log(result))

5. 删除文档

5.1 删除单个

// 查找到一条文档并且删除
// 返回删除的文档
// 如何查询条件匹配了多个文档 那么将会删除第一个匹配的文档
User.findOneAndDelete({_id: '5f1134b28ecdf026285b4d9b'}).then(result => console.log(result))

5.2 删除多个文档

User.deleteMany({}).then(result => console.log(result))

结果:
MongoDB增删改查操作
ok为1代表删除成功, n为删除的条数

6. 更新文档

6.1 更新单个

// 如果匹配多条文档, 只更新第一个匹配的文档
Course.updateOne({name: '卫庄'}, {name: '血衣侯'}).then(result => console.log(result))

6.2 更新多个文档

Course.updateMany({}, {name: 'zhangsan'}).then(result => console.log(result))