zoukankan      html  css  js  c++  java
  • Mongoose 入门以及实现数据的增、删、改、查

    mongoose 介绍

    Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动。

    Mongoose 有两个特点:通过关系型数据库的思想来设计非关系型数据库;基于 mongodb 驱动,简化操作

    官网:https://mongoosejs.com/

    mongoose 的安装以及使用

    第一步:初始化项目

    创建一个项目文件夹,进入文件夹生成package.json文件

    npm init --yes

    第二步:安装mongoose

    npm i mongoose --save

    第三步:创建操作mongoose的js模块并且引入和连接数据库

    需要先启动mongoDB服务,并且先创建一个数据库eggcms和一个users集合(表)

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms');
    
    // 如果有账户密码需要采用下面的连接方式:
    // mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms');

    第四步:定义Schema

    数据库中的 Schema,为数据库对象的集合。 schema 是 mongoose 里会用到的一种数据模式, 可以理解为表结构的定义;每个 schema 会映射到 mongodb 中的一个 collection,它不具备 操作数据库的能力

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms');
    
    // 如果有账户密码需要采用下面的连接方式:
    // mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms');
    
    
    // 定义一个Schema,操作users集合
    // Schema里面的对象和数据库表里面的字段需要一一对应
    let UserSchema = mongoose.Schema({
      name: String,
      age: Number,
      status: Number
    })

    第五步:创建数据模型

    定义好了 Schema,接下就是生成 Model。model 是由 schema 生成的模型,可以对数据库的 操作。

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms');
    
    // 如果有账户密码需要采用下面的连接方式:
    // mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms');
    
    
    // 定义一个Schema,操作users集合
    // Schema里面的对象和数据库表里面的字段需要一一对应
    let UserSchema = mongoose.Schema({
      name: String,
      age: Number,
      status: Number
    })
    
    
    // 定义数据库模型  操作数据库
    // 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
    // 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
    // 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
    // var User = mongoose.model('User',UserSchema);    // 默认会操作 users表(集合)
    var User = mongoose.model('User',UserSchema,'users');  //默认会操作第三个参数配置的表  user表(集合)

    第六步:操作数据库

    增加数据,通过实例化User Molde 创建增加的数据,最后实例.save()

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms');
    
    // 如果有账户密码需要采用下面的连接方式:
    // mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms');
    
    
    // 定义一个Schema,操作users集合
    // Schema里面的对象和数据库表里面的字段需要一一对应
    let UserSchema = mongoose.Schema({
      name: String,
      age: Number,
      status: Number
    })
    
    
    // 定义数据库模型  操作数据库
    // 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
    // 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
    // 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
    // var User = mongoose.model('User',UserSchema);    // 默认会操作 users表(集合)
    let User = mongoose.model('User',UserSchema,'users');  //默认会操作第三个参数配置的表  user表(集合)
    
    // 增加数据
    let u = new User({
      name: '李四',
      age: 23,
      status: 1
    })
    u.save((err) => {
      if (err) {
        console.log(err)
        return
      }
      console.log('增加数据成功')
    })

    查询users表的数据

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms');
    
    // 如果有账户密码需要采用下面的连接方式:
    // mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms');
    
    
    // 定义一个Schema,操作users集合
    // Schema里面的对象和数据库表里面的字段需要一一对应
    let UserSchema = mongoose.Schema({
      name: String,
      age: Number,
      status: Number
    })
    
    
    // 定义数据库模型  操作数据库
    // 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
    // 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
    // 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
    // var User = mongoose.model('User',UserSchema);    // 默认会操作 users表(集合)
    let User = mongoose.model('User',UserSchema,'users');  //默认会操作第三个参数配置的表  user表(集合)
    
    // 增加数据
    let u = new User({
      name: '李四',
      age: 23,
      status: 1
    })
    u.save((err) => {
      if (err) {
        console.log(err)
        return
      }
      console.log('增加数据成功')
    })
    
    
    // 查询users表的数据
    User.find({}, (err, doc) => {
      if (err) {
        console.log(err)
        return
      }
      console.log(doc)
    })

    更新数据

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms');
    
    // 如果有账户密码需要采用下面的连接方式:
    // mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms');
    
    
    // 定义一个Schema,操作users集合
    // Schema里面的对象和数据库表里面的字段需要一一对应
    let UserSchema = mongoose.Schema({
      name: String,
      age: Number,
      status: Number
    })
    
    
    // 定义数据库模型  操作数据库
    // 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
    // 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
    // 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
    // var User = mongoose.model('User',UserSchema);    // 默认会操作 users表(集合)
    let User = mongoose.model('User',UserSchema,'users');  //默认会操作第三个参数配置的表  user表(集合)
    
    
    
    // 更新数据
    User.updateOne({
      '_id': '5cdc42953beb59420c5893c6'
    }, {
      'name': '王五',
      'age': 11
    }, (err, doc) => {
      if (err) {
        console.log(err)
        return
      }
      console.log(doc)
    })

    删除数据

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms');
    
    // 如果有账户密码需要采用下面的连接方式:
    // mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms');
    
    
    // 定义一个Schema,操作users集合
    // Schema里面的对象和数据库表里面的字段需要一一对应
    let UserSchema = mongoose.Schema({
      name: String,
      age: Number,
      status: Number
    })
    
    
    // 定义数据库模型  操作数据库
    // 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
    // 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
    // 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
    // var User = mongoose.model('User',UserSchema);    // 默认会操作 users表(集合)
    let User = mongoose.model('User',UserSchema,'users');  //默认会操作第三个参数配置的表  user表(集合)
    
    
    
    // 删除数据
    User.deleteOne({
      '_id': '5cdc42953beb59420c5893c6'
    }, (err, result) => {
      if(err){
        return console.log(err);
      }
      console.log(result)
    })

    mongoose 默认参数

    增加数据的时候,如果不传入数据会使用默认配置的数据(在定义Schema的时候,去设置),下面增加数据的时候只写了两个参数

    const mongoose = require('mongoose');
    
    // useNewUrlParser是4.0版本之后,不写这个参数会有警告,这个属性会在url里识别验证用户所需的db,4.0前是不需要指定的
    // 第三个参数添加一个回调函数,获取数据库连接是否成功
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms', { useNewUrlParser: true }, (err) => {
      if(err){
        return console.log(err);
      }
      console.log('数据库连接成功')
    });
    
    
    let UserSchema = mongoose.Schema({
      name: String,
      age: Number,
      status: {
        type: Number,
        default: 1
      }
    })
    
    // 定义model操作数据库
    let User = mongoose.model('User',UserSchema,'users');
    
    
    
    // 增加数据
    let u = new User({
      name: '赵六',
      age: 23
    })
    u.save((err) => {
      if (err) {
        console.log(err)
        return
      }
      console.log('增加数据成功')
    })
    
    
    // 查询users表的数据
    User.find({}, (err, doc) => {
      if (err) {
        console.log(err)
        return
      }
      console.log(doc)
    })

    mongoose 模块化

    在项目中操作数据库的文件夹中,新建一个文件夹model,并且创建一个db.js文件用于连接数据库,并且暴露出来即可

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms', { useNewUrlParser: true }, (err) => {
      if(err){
        return console.log(err);
      }
      console.log('数据库连接成功')
    });
    
    module.exports = mongoose

    接下来定义子模块,比如操作users集合,那么就在model中创建一个users.js,并且将操作模型暴露出去

    let mongoose = require('./db')
    
    let UserSchema = mongoose.Schema({
      name: String,
      age: Number,
      status: {
        type: Number,
        default: 1
      }
    })
    
    // 定义model操作数据库
    let UserModel = mongoose.model('User',UserSchema,'users');
    
    module.exports = UserModel

    然后再app.js中如果需要操作那个集合就引入哪个集合的操作模型,然后进行数据库操作

    let UserModel = require('./model/users')
    
    // 增加数据
    let u = new UserModel({
      name: '黄中国',
      age: 23
    })
    u.save((err) => {
      if (err) {
        console.log(err)
        return
      }
      console.log('增加数据成功')
    
      // 查询users表的数据
      UserModel.find({}, (err, doc) => {
        if (err) {
          console.log(err)
          return
        }
        console.log(doc)
      })
    })

    性能测试

    console.time('user');
    let UserModel = require('./model/users')
    console.timeEnd('user');
    
    
    // 假设还有一个模块,引入user的时候,已经连接了数据库,这里第二次引入别的模块不会在连接数据库,直接可以使用
    console.time('news');
    let UserModel = require('./model/news')
    console.timeEnd('');

  • 相关阅读:
    基础知识漫谈(5):应用面向对象来分析“语言”
    【线段树】BZOJ2752: [HAOI2012]高速公路(road)
    【树状数组】BZOJ3132 上帝造题的七分钟
    【AC自动机】Lougu P3796
    【Splay】bzoj1500(听说此题多码上几遍就能不惧任何平衡树题)
    【fhq Treap】bzoj1500(听说此题多码上几遍就能不惧任何平衡树题)
    【可持久化线段树】POJ2104 查询区间第k小值
    【RMQ】洛谷P3379 RMQ求LCA
    【倍增】洛谷P3379 倍增求LCA
    【网络流】POJ1273 Drainage Ditches
  • 原文地址:https://www.cnblogs.com/LO-ME/p/10873174.html
Copyright © 2011-2022 走看看