• Nodejs学习笔记(二)--- 操作MongoDB数据库


    最近看了一些关于mongodb的文章,然后就想知道nodeJS是怎么连接的所以我就尝试去了解了一波(这个菜鸟驿站这个网站还不错,虽然知识文档不是最新的,但是还是蛮好的;

      顺便官网地址是这个哦:http://mongoosejs.com/docs/guide.html

     好了,让我们来进入今天的主题:

     首先来进入你项目的根目录下安装: npm install  mongoose

       关于mongoose, 有三个概念:Schema、Model 和 Entity

      Schema: 一种以文件形式存储的数据库模型框架,不具备操作数据库的能力。

      { 每个Schema会映射到MongoDB中的一个给定的集合(Collection)}

      Model: 由Schema发布的模型,具有抽象的属性和行为,可以直接操作数据库。

      { 在mongoose中,所有的数据都是一种模型(Model),每个模型都映射到MOngDB的一个集合,并且定义了该集合文件结构}

      Entity: 由Model创建的实体,它可以直接操作数据库。

    一直想用下这个数据的,最近终于得偿所愿。数据库的使用,我觉得首先是从增删改查开始,然后才去像更加复杂的地步去卖家
    首先如何去获取他的连接
    创建db.js , 可以直接通过node db.js 命名去观察连接的效果
    一 建立连接
    var mongoose = require('mongoose'),
    DB_URL = 'mongodb://127.0.0.1:27017/Test';
    
    // 连接
    mongoose.connect(DB_URL);
    
    // 测试连接是否成功
    mongoose.connection.on('connected', function () {
      console.log('my mongodb connection success !!!')
    })
    
    // 连接异常的情况
    mongoose.connection.on('error', function (er) {
      console.log('connection error: ' + er);
    })
    
    // 连接断开
    mongoose.connection.on('disconnected', function () {
      console.log('mongogdb disconnection')
    })
    
    
    module.exports = mongoose;
    二: 创建数据模型
    创建Schema ( 有点类似创建实例属性) 并建立Model

    // 获取连接
    var mongoose = require('./db.js'),
      Schema = mongoose.Schema;
    
    // 创建用户
    var userInfo = new Schema({
      uid: {type: String},
      uname: {type: String},
      upwd: {type: String},
      loginDate: {type: Date}
    })
    
    // 将定义好的schema 转换为model 
    module.exports = mongoose.model('userInfo', userInfo);
    

    三 对数据库操作 

     3.1 插入操作:

    var User = require('./userInfo.js')
    
    /*
     插入操作
     */
    
    function insert() {
      var userInfo = new User({
        uid: '1',
        uname: 'yaobo1',
        upwd: '123',
        loginDate: new Date()
      })
    
      userInfo.save(function (err, res) {
        if(err) {
          console.log('err' + err);
        } else {
          console.log('res:' + res)
        }
      })

    // 插入多条
    userInfo.
    insertMany([], function (err, res) {

     })
    } insert();

       3.2 查询操作:

      这里在做模糊查询的时候是使用正则表达式来判断的

      引用:

    $regex操作符的使用
    $regex操作符中的option选项可以改变正则匹配的默认行为,它包括i, m, x以及S四个选项,其含义如下
    • i 忽略大小写,{<field>{$regex/pattern/i}},设置i选项后,模式中的字母会进行大小写不敏感匹配。
    • m 多行匹配模式,{<field>{$regex/pattern/,$options:'m'},m选项会更改^和$元字符的默认行为,分别使用与行的开头和结尾匹配,而不是与输入字符串的开头和结尾匹配。
    • x 忽略非转义的空白字符,{<field>:{$regex:/pattern/,$options:'m'},设置x选项后,正则表达式中的非转义的空白字符将被忽略,同时井号(#)被解释为注释的开头注,只能显式位于option选项中。
    • s 单行匹配模式{<field>:{$regex:/pattern/,$options:'s'},设置s选项后,会改变模式中的点号(.)元字符的默认行为,它会匹配所有字符,包括换行符( ),只能显式位于option选项中。
    使用$regex操作符时,需要注意下面几个问题:
    • i,m,x,s可以组合使用,例如:{name:{$regex:/j*k/,$options:"si"}}
    • 在设置索弓}的字段上进行正则匹配可以提高查询速度,而且当正则表达式使用的是前缀表达式时,查询速度会进一步提高,例如:{name:{$regex: /^joe/}
    var User = require('./userInfo.js')
    
    /*
       查询操作
     */
    
    function find() {
      let wherestr = {uid: '1'}
    
      User.find(wherestr, function (err, res) {
        if(err) {
          console.log('err' + err);
        } else {
          console.log('res:' + res)
        }
      })
    }
    
    /*
      模糊查询
     */
    
    function getRegex(){
      var wherestr = {uname: {$regex: /yaobo/m}}
      console.log(wherestr);
      User.find(wherestr, function (err, res) {
        if(err) {
          console.log('err' + err);
        } else {
          console.log('res:' + res)
        }
      })
    }
    
    /*
      聚合查询
     */
    
    function aggregate(){
      var wherestr = [{$group: {_id: '$uname', num: {$sum: 1}}}]
      console.log(wherestr);
      User.aggregate(wherestr, function (err, res) {
        if(err) {
          console.log('err' + err);
        } else {
          console.log('res:' + JSON.stringify(res))
        }
      })
    }
    
    //find();
    
    // http://blog.csdn.net/u022812849/article/details/51314810
    
    // getRegex();
    
    aggregate();
    View Code

     3.3 删除操作

    var User = require('./userInfo.js')
    
    function remove() {
      let wherestr = {uid: '1'}
    
      User.remove(wherestr, function (er, res) {
        if (er) {
          console.log('er:', er)
        }
        if (res) {
          console.log('res', res)
        }
      })
    }
    
    remove();
    View Code

    3.4 更新操作

    var User = require('./userInfo.js')
    
    function update() {
      var wherestr = {uname: 'yaobo1'}
      var updatestr = {uname: '神奇的造物主'}
    
      User.update(wherestr, updatestr, function (er , res) {
         if (er) {
           console.log('er:', er)
         }
         if (res) {
           console.log('res', res)
         }
      })
    }
    
    update();
    View Code

      其实这样写下来就会发现,掌握了结构之后,就是知道如何去使用nodejs去操作mongodb, 可能有些复杂的没写(后续有好的东西,再往上加),不过基本语句掌握了,掌握mongdb的语言就尤为重要了

  • 相关阅读:
    CSS cursor 属性笔记
    sql 不等于 <>
    去掉时间中的时分秒
    ref 和 out区别
    关于闭包(未完待续)
    面向对象——多态(摘)
    SQL Service 数据库 基本操作 视图 触发器 游标 存储过程
    遍历winform 页面上所有的textbox控价并赋值string.Empty
    关于Html 和Xml 区别(备忘)
    python之面向对象进阶
  • 原文地址:https://www.cnblogs.com/yaobolove/p/8313185.html
Copyright © 2020-2023  润新知