Contents
  1. 1. 一、在Node中如何操作MongoDB 数据库
    1. 1.0.1. 使用官方的MongoDB包来操作
    2. 1.0.2. 使用第三方mongoose来操作MongoDB数据库
      1. 1.0.2.0.1. 1. 装包
      2. 1.0.2.0.2. 2. 基本感知
  • 2. 二、 Mongoose 基本感知
    1. 2.0.1. 1. 连接数据库
    2. 2.0.2. 2. 设计文档结构(表结构)
    3. 2.0.3. 3. 将文档结构发布为模型
  • 3. 三、 基本操作
    1. 3.0.1. 1. 新增数据
    2. 3.0.2. 2.查询数据
    3. 3.0.3. 3. 删除数据
    4. 3.0.4. 4. 更新数据
  • 在上一篇博客里介绍了MongoDB数据库,也基本上感知了MongoDB的基本用法,这一篇将介绍一下如何在node中使用mongodb

    一、在Node中如何操作MongoDB 数据库

    使用官方的MongoDB包来操作

    https://www.npmjs.com/package/mongodb
    在上边有官方的教程和步骤(比较源生)

    使用第三方mongoose来操作MongoDB数据库

    mongoose是一个基于MongoDB官方的做了再一次封装的mongodb包
    Mongoose

    1. 装包

    npm init -y
    npm install –save mongoose

    2. 基本感知

    我们创建demo1,然后将官网上的代码直接拿过来,我在下面进行了注释
    然后打开cmd 输入mongod 连接mongodb,再运行下面代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // 引包
    var mongoose = require('mongoose');
    //连接 MongoDB 数据库
    mongoose.connect('mongodb://localhost/test');
    mongoose.Promise = global.Promise;
    //创建一个模型(设计数据库)
    var Cat = mongoose.model('Cat', { name: String });
    // 实例化一个 Cat
    var kitty = new Cat({ name: '喵喵'})
    // 持久化保存 kitty 实例
    kitty.save(function (err) {
    if (err) {
    console.log(err);
    } else {
    console.log('meow');
    }
    });

    当我们运行该段代码会输出 meow
    输出

    然后我们可以再打开一个cmd 输入mongo 然后输入 show dbs查看当前数据库
    查看当前数据库

    就会出现test,说明mongdb是动态的。
    我们可以切换到test数据库下查看当前集合和集合中的数据

    use test
    show collections
    db.cats.find

    查看数据

    那个students是我之前建立的
    输出100个meow

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    // 引包
    var mongoose = require('mongoose');
    //连接 MongoDB 数据库
    mongoose.connect('mongodb://localhost/test');
    mongoose.Promise = global.Promise;
    //创建一个模型(设计数据库)
    var Cat = mongoose.model('Cat', { name: String });
    for(var = 0; i < 100; i++) {
    var kitty = new Cat({ name: '喵喵' + i})
    kitty.save(function (err) {
    if (err) {
    console.log(err);
    } else {
    console.log('meow');
    }
    });
    }

    二、 Mongoose 基本感知

    1. 连接数据库

    连接的是本机的test数据库,如果想改就可以改
    注意:指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来

    mongoose.connect(‘mongodb://localhost/test’)

    2. 设计文档结构(表结构)

    字段名称就是表结构中的属性名称,值可以是其他类型(js数据类型)
    需要对字段进行约束,约束的目的是为了保证数据的完整性,不要有脏数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var userSchema = new Schema({
    username: {
    type: String,
    required: true // 必须有
    },
    password: {
    type: String,
    required: true
    },
    email: {
    type: String
    }
    })

    3. 将文档结构发布为模型

    mongoose.model 方法就是用来将一个架构发布为 model

    • 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称,mongoose 会自将大写名词的字符串生成 小写复数 的集合名称,例如这里的 User 最终会变为 users 集合名称

      • 第二个参数:架构 Schema

      • 返回值:模型构造函数

        var User = mongoose.model(‘User’, userSchema)

    下面附上源码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    var mongoose = require('mongoose')

    var Schema = mongoose.Schema
    //连接数据库
    mongoose.connect('mongodb://localhost/test')

    var userSchema = new Schema({
    username: {
    type: String,
    required: true // 必须有
    },
    password: {
    type: String,
    required: true
    },
    email: {
    type: String
    }
    })

    var User = mongoose.model('User', userSchema)

    三、 基本操作

    1. 新增数据

    我插入了一条name为zs的数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    //新增数据
    var admin = new User({
    username: 'zs',
    password: '123456',
    email: 'admin@admin.com'
    })

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

    结果:
    新增数据
    result表示新增的数据

    2.查询数据

    • 查询所有
      1
      2
      3
      4
      5
      6
      7
      8

      User.find(function (err, ret) {
      if (err) {
      console.log('查询失败')
      } else {
      console.log(ret)
      }
      })

    如下图可以看见查询出来的是一个数组

    查询所有

    • 按条件查询
      在此之前我又插入一条name为李四的数据,利用上一步方法,可以查询到所有结果
      所有查询结果

    使用以下代码查询名字为zs的数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    User.find({
    username: 'zs'
    }, function (err, ret) {
    if (err) {
    console.log('查询失败')
    } else {
    console.log(ret)
    }
    })

    输出为:
    按条件查询

    • 按条件查询单个
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    User.findOne({
    username: 'zs'
    password: '123456'
    }, function (err, ret) {
    if (err) {
    console.log('查询失败')
    } else {
    console.log(ret)
    }
    })

    以下为输出结果,可以看书输出不是数组,而是对象

    按条件查询单个

    注意: 若查询条件为空,默认输出第一条数据

    3. 删除数据

    • 根据条件删除所有
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

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

    查询所有输出结果为:
    根据条件删除所有

    • 根据条件删除一个

      model.findOneAndRemove(conditions, [options], [callback])

    • 根据id删除一个

      model.fingByIdAndRemove(id, [options], [callback])

    4. 更新数据

    • 根据id更新一个

    这里的id是和刚刚查询出来的保持一致

    1
    2
    3
    4
    5
    6
    7
    8
    9
    User.findByIdAndUpdate('5bd3117b5db711042015908f', {
    password: '123'
    }, function (err, ret) {
    if (err) {
    console.log('更新失败')
    } else {
    console.log('更新成功')
    }
    })

    初始李四密码结果如下:
    初始密码

    得到更新后的李四密码:
    更新之后

    • 根据条件更新所有

      model.update(conditions, doc, [options], [callback])

    • 根据指定条件更新一个

      model.findOneAndUpdate(conditions, [update], [options], [callback])

    Contents
    1. 1. 一、在Node中如何操作MongoDB 数据库
      1. 1.0.1. 使用官方的MongoDB包来操作
      2. 1.0.2. 使用第三方mongoose来操作MongoDB数据库
        1. 1.0.2.0.1. 1. 装包
        2. 1.0.2.0.2. 2. 基本感知
  • 2. 二、 Mongoose 基本感知
    1. 2.0.1. 1. 连接数据库
    2. 2.0.2. 2. 设计文档结构(表结构)
    3. 2.0.3. 3. 将文档结构发布为模型
  • 3. 三、 基本操作
    1. 3.0.1. 1. 新增数据
    2. 3.0.2. 2.查询数据
    3. 3.0.3. 3. 删除数据
    4. 3.0.4. 4. 更新数据