zoukankan      html  css  js  c++  java
  • MongoDB学习day07--mongoose入门,数据库增删改查,默认参数,模块化

    一、mongoose介绍

    Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。 Mongoose

    NodeJS 的驱动, 不能作为其他语言的驱动。 

    Mongoose 有两个特点:

    1、 通过关系型数据库的思想来设计非关系型数据库
    2、 基于 mongodb
    驱动, 简化操作

    二、mongoose的安装以及使用

    1.安装

    npm/cnpm mongoose --save

    2.引入mongoose并连接数据库

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

    3.定义Schema

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

    var UserSchema=mongoose.Schema({
    name: String,
    age:Number,
    status:'number'
    })

    4.创建数据模型

    model 是由 schema 生成的模型, 可以对数据库的操作。 

    注意: mongoose.model 里面可以传入两个参数也可以传入三个参数 

    mongoose.model(参数 1:模型名称(首字母大写) , 参数 2:Schema

    传两个参数,默认会和模型名称相同的复数的集合建立连接,例如模型名称为"User",则会默认操作users这个集合

    var User=mongoose.model('User', UserSchema);

    mongoose.model(参数 1:模型名称(首字母大写) , 参数 2:Schema, 参数 3:数据库集合名称) 

    传三个参数,会和第三个参数的集合建立连接,操作第三个参数的集合

    var User=mongoose.model('User', UserSchema,'users');
    5.查找数据

    User.find({},function(err,docs){
      if(err){
        console.log(err);
        return;
      }
      console.log(docs); })

    6.增加数据

    var u=new User({ //实例化模型 传入增加的数据
      name:'lisi2222333',
      age:20,
      status:true
    })
    u.save(function(err,docs){
      if(err){
        console.log(err);
        return;
      }
      console.log(docs); })

    7.修改数据

    User.updateOne({ name: 'lisi2222' }, { name: '哈哈哈' }, function(err, res) {
      if(err){
        console.log(err);
        return;
      }
      console.log(
    '成功') });

    8.删除数据

    User.deleteOne({ _id: '5b72ada84e284f0acc8d318a' }, function (err) {
      if (err) {
        console.log(err);
        return;
      } 
      // deleted at most one tank document   console.log('成功'); });

    9.保存成功查找

    var u=new User({
      name:'lisi2222333',
      age:20,
      status:true //类型转换
    })
    u.save(function(err,docs){
      if(err){
        console.log(err);
        return;
      } 
      //console.log(docs);   User.find({},function(err,docs){   if(err){     console.log(err);     return;   }
      console.log(docs);   }) });

    三、默认参数

    在定义schema时,设置默认参数

    var UserSchema=mongoose.Schema({
        name:String,
        age:Number,
        status:{
            type:Number,
            default:1   //默认为1
        }
    })

    四、模块化

    1.先创建数据库连接模块moongoose

    //连接数据库
    
    var mongoose=require('mongoose');
    
    //useNewUrlParser这个属性会在url里识别验证用户所需的db,未升级前是不需要指定的,升级到一定要指定。
    
    mongoose.connect('mongodb://127.0.0.1:27017/eggcms',{ useNewUrlParser: true },function(err){
            if(err){
    
                console.log(err);
                return;
            }
            console.log('数据库连接成功')
    });
    
    module.exports=mongoose; //输出mongoose

    2.创建user模块

    var mongoose=require('./db.js');
    
    
    var UserSchema=mongoose.Schema({
        name:String,
        age:Number,
        status:{
            type:Number,
            default:1   
        }
    })
    
    
    
    module.exports=mongoose.model('User',UserSchema,'user');

    3.创建news模块

    var mongoose=require('./db.js');
    
    
    var NewsSchema=mongoose.Schema({
        title:"string",
        author:String,
        pic:String,
        content:String,
        status:{
    
            type:Number,
            default:1
    
        }
    })
    
    
    module.exports=mongoose.model('News',NewsSchema,'news');

    4.使用模块

    var UserModel=require('./model/user.js');
    
    var NewsModel=require('./model/news.js');
    
    var user=new UserModel({
    
        name:"李四666",
        age:40
    })
    
    user.save(function(err){
        if(err){
    
            console.log(err);
            return;
        }
        //获取user表的数据
    
        UserModel.find({},function(err,docs){
            if(err){
        
                console.log(err);
                return;
            }
            console.log(docs);
        })
    })
    // NewsModel.find({},function(err,docs){
    
    //     if(err){
    
    //         console.log(err);
    //         return;
    //     }
    //     console.log(docs);
    // })

    五、模块性能

    多个模块,不会多次连接数据库,只会在引入第一个模块时连接数据库

    可以通过以下代码测试

    console.time('user');
    
    var UserModel=require('./model/user.js');
    
    console.timeEnd('user');
    
    console.time('news');
    var NewsModel=require('./model/news.js');
    
    console.timeEnd('news');

    结果是:第一次时间大于第二次

  • 相关阅读:
    Django 1.6 最佳实践: 如何设置和使用 Log(转)
    Django Signals 从实践到源码分析(转)
    Django 1.6 最佳实践: 如何正确使用 Signal(转)
    Django 1.6 最佳实践: django项目的服务器自动化部署(转)
    Django中如何使用django-celery完成异步任务1(转)
    Django中如何使用django-celery完成异步任务2(转)
    干货 | 精选《SQL注入、渗透、反病毒》学习总结集锦给你们~
    Kali Linux来袭~老司机带你进击
    CTF中密码学一些基础【三】
    DC010的精华分享【首发速看】
  • 原文地址:https://www.cnblogs.com/xc-chejj/p/10915007.html
Copyright © 2011-2022 走看看