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

nodeJS从入门到进阶三(MongoDB数据库)

程序员文章站 2022-05-03 13:41:21
一、MongoDB数据库 1、概念 数据库(DataBase)是一个按照数据结构进行数据的组织,管理,存放数据的仓库。 2、关系型数据库 按照关系模型存储的数据库,数据与数据之间的关系非常密切,可以实现跨数据表查询数据,占用更少的硬盘实现更多的数据存储 T SQL标准的结构化查询语言,是关系型数据库 ......

一、mongodb数据库

1、概念

数据库(database)是一个按照数据结构进行数据的组织,管理,存放数据的仓库。

2、关系型数据库

按照关系模型存储的数据库,数据与数据之间的关系非常密切,可以实现跨数据表查询数据,占用更少的硬盘实现更多的数据存储
t-sql标准的结构化查询语言,是关系型数据库的通用查询语言
常见的关系型数据库:mysql sql-server access sqlite.....

结构:一台服务器==》数据库==》数据表==》数据行

3、非关系型数据库

不按关系模型存储的数据库,统称为nosql
第一层含义:不是sql,不是关系型数据库
第二层含义:not only sql,不仅仅是sql

结构:一台服务器==》数据库===》集合==》文档

4、mongdb

  • mongodb 是一个基于分布式文件存储的数据库,目前是世界上用得最多的非关系型数据库,也是最像关系型的非关系型数据库
  • mongodb以bson(二进制+json)格式进行数据存储,可以直接存储,可以直接存储对象、数组
  • mongodb 将数据存储为一个文档,数据结构由键值(key=>value)对组成。

使用

  • 官网下载安装mongodb软件
  • 设置环境变量,mongo命令所在位置:c:\program files\mongodb\server\3.2\bin 添加到环境变量 修改用户下path的值

创建文件夹

在非系统盘根目录创建一个文件夹mongodb,在创建两个子文件夹db和log-->mongod.log

将mongodb挂载成为windows服务

  • 1.使用命令挂载服务

    mongod --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\mongod.log" --install --servicename "mongodb"

  • 2.使用服务窗口界面启动服务

    在计算机点右键管理--->服务与应用程序---->服务----->找到mongodb右键启用

  • 3.使用命令行启动服务

    net start mongodb 开启服务
    net stop mongodb 关闭服务
    sc delete mongodb 卸载服务

常见问题

32位操作系统 必须加 --storageengine mmapv1
windows8 windows10 打开命令行用管理员方式打开

5、数据库常用操作

进入数据库管理模式

  • 在命令行中运行:mongo 进入数据管理模式
  • 在数据管理模式中只能执行数据库命令,不能执行其他命令
  • exit 退出数据库管理模式

常用命令

  • 数据库命令:
    • a.显示所有的数据列表
      show dbs
    • b.创建数据库/进入数据库
      use 数据库名
      如果数据库名不存在,则创建
      如果数据库已存在,则进入
    • c.查看当前数据库是谁
      db
    • d.删除数据库
      db.dropdatabase()
  • 集合命令:
    • a.显示当前数据库中所有集合
      show collections
    • b.创建集合
      db.集合名.insert({})
      通常,在创建数据时自动创建集合,不需要单独创建
    • c.删除集合
      db.集合名.drop()
  • 文档(数据)的操作(【重点】)
    • a.新增文档(数据)
      • db.集合名.insert({json数据})
      • db.集合名.save({json数据})
      • 例如:
      db.user.insert({"name":"admin","password":"12342423"});
      db.user.save({"username":"admin","password":"12342423"});
      
      /*  insert和save方法的区别:
          .insert() 向集合中插入一条数据【推荐使用】
          .save() 向集合中添加一条数据,如果集合中已存在该数据则更新
      */
    • b.查看文档(数据)
      • db.集合名.find(); //查找当前集合中的所有数据
      • db.集合名.find({条件对象}) //将符合条件的数据查出来
      • db.集合名.findone();
      • db.集合名.find().pretty(); //将找到的数据已格式化的结果显示出来
    • c.修改数据
      • db.集合名.update({查找对象,修改结果})
      • 例如:
      db.user.update({"name":"张三"},{"age":18}) //改动整条数据
    • d.删除数据
      • db.集合名.remove({}) //删除当前集合中的所有数据
      • db.集合名.remove({条件}) //删除指定的数据
      • 例如:
      db.user.remove({"age":"18"})
      
      // 注意:由于删除和更新会对数据造成极大影响,需谨慎

6、mongodb高级用法

按指定条件查询

  • 大于 - $gt
db.集合名.find({字段名:{$gt:值}})
  • 大于等于 - $gte
db.集合名.find({字段名:{$gte:值}}) 
  • 小于 - $lt
 db.集合名.find({字段名:{$lt:值}}) 
  • 小于等于 - $lte
db.集合名.find({字段名:{$lte:值}})
  • 使用 (<) 和 (>) 查询指定范围
db.集合名.find({字段名:{$gt:小值,$lt:大值}})
  • 使用数组指定范围 - $in
db.集合名.find({字段名:{$in:[1,2,3,4]}})
  • 查找数组元素个数 - $size
db.集合名.find({字段名:{$size:长度}})
  • 判断是否存在 - $exists
db.集合名.find({字段名:{$exists:true|false}})
  • 查找多个条件时,符合其中一个就找出来 - $or
db.集合名.find({字段名:{$or:[{...},{...},...]}})

排序

db.集合名.find().sort({"key":-1,"ke2":1,...}) //1代表升序,-1代表降序

限定输出limit() skip()

db.集合名.find().limit('数字') //限定输出数据的条数
db.集合名.find().skip('数字') //跳过指定的数据条数

//这两个限定输出的语句主要用于分页

模糊查询

db.集合名.find({字段名:/值/ig}) //使用正则表达式

二、mongoose操作数据库

1、概念

是一个基于nodejs的用于操作mongodb数据库的第三方模块

2、安装

npm install mongoose

3、使用

在routes目录下,在需要用到数据库的路由添加如下代码:

var mongoose = require('mongoose');
//连接数据库
mongoose.connect("mongodb://主机名:27017/数据库名",function(err){
    if(err){
        throw err;
    }else{
        console.log("数据库连接成功");
    }
})

//定义骨架
//schema骨架是一种数据结构声明,不具备数据库的操作能力
//骨架类型:string、number、date、buffer、objectid、array...
var schema = new mongoose.schema({
    字段名:类型,
    ...
})

//创建模型
//model模型是一种根据骨架创建出的一个模型,具备数据库操作能力,通常用于读取数据库
var listmodel = mongoose.model("模型名称","骨架","集合名称");

//创建实体entity
//entity实体是根据模型创建出的一个实例,具备数据库操作能力,通常用于写数据(新增,修改,删除)
var list = new listmodel();
list.属性名 = 值;
list.save(); //将添到实例上的属性保存到数据库中
list.remove();//删除数据

4、数据操作

查询数据/读取数据

//根据条件进行数据查询,可以找出多条数据
    模型.find({条件},function(err,data){
        //data是从数据库中读取到的数据
        //find方法找出来的数据一定是一个数组,即使没有数据也是一个空数组
    })

//通过id查找一条数据
    模型.findbyid('id',function(err,data){
        //find方法找出来的数据一定是一个对象
    })

//另一种常用方法(为了实现更好的链式调用)
    模型.find({条件}).exec(function(err,data){
    })

新增数据

var list = new listmodel(); //根据模型创建实例
list.name = '张三';
list.age =23;
//将新增的数据保存到数据库中
list.save(function(err){
    console.log("新增成功");
})

//注意:骨架中没有定义的属性及类型,不能添加到数据库

删除数据

/*
    思想:
    第一步:找出要被删除的数据,
    第二部:调用remove()方法删除数据
    */