一、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

将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 退出数据库管理模式

数据库命令:

  • 1.显示所有的数据列表

    show dbs
  • 2.创建数据库/进入数据库

    use 数据库名

    如果数据库名不存在,则创建

    如果数据库已存在,则进入
  • 3.查看当前数据库是谁

    db
  • 4.删除数据库

    db.dropDatabase()

集合命令:

  • 1.显示当前数据库中所有集合

    show collections
  • 2.创建集合

    db.集合名.insert({})

    通常,在创建数据时自动创建集合,不需要单独创建
  • 3.删除集合

    db.集合名.drop()

文档(数据)的操作

  • 1.新增文档 (增)

    db.集合名.insert({})

    db.集合名.save({JSON数据})

    • 例如:
    db.user.insert({"name":"admin","password":"12342423"});
    db.user.save({"username":"admin","password":"12342423"}); /* insert和save方法的区别:
    .insert() 向集合中插入一条数据【推荐使用】
    .save() 向集合中添加一条数据,如果集合中已存在该数据则更新
    */
  • 2.删除数据(删)

    db.集合名.remove({}) //删除当前集合中的所有数据

    db.集合名.remove({条件}) //删除指定的数据

    • 例如:
    db.user.remove({"age":"18"})
    
    // 注意:由于删除和更新会对数据造成极大影响,需谨慎
  • 3.修改数据(改)

    db.集合名.update({查找对象,修改结果})

    • 注意,会修改整条数据
    • 例如:
    db.user.update({"name":"张三"},{"age":18}) //改动整条数据
  • 4.查看文档数据(查)

    db.集合名.find() //查找当前集合中的所有数据

    db.集合名.find({条件对象}) //将符合条件的数据查出来

    db.集合名.findOne() //查询到的第一个对象

    db.集合名.find().pretty() //将找到的数据已格式化的结果显示出来

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 userSchema = new mongoose.Schema({
name:String,
age:{
type:Number,
default:0
},
sex:{
type:String
}
}) //创建模型
//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()方法删除数据
*/
listModel.findById(id).exec(function(err,data){
data.remove(function(err){});
})

修改数据

/*
思想:
第一步:找出要被修改的数据,
第二部:将数据修改后保存回数据库
*/
listModel.findById(id).exec(function(err,data){
data.name = 新的值;
data.age = 新的值;
...
data.save(function(err){})
})

nodeJS从入门到进阶三(MongoDB数据库)的更多相关文章

  1. NodeJs之EXCEL文件导入导出MongoDB数据库数据

    NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...

  2. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

  3. nodejs读取json文件,写入mongodb数据库

    最近又一点时间,开始使用mongodb存储json模型文件,然后可以实现模型文件的在线编辑和管理.今天上午实现了json文件入库的代码,如下: var fs=require("fs" ...

  4. nodeJS从入门到进阶一(基础部分)

    一.Node.js基础知识 1.概念 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是JavaScript的运行环境 Node.js 使用了一个事件驱动.非阻塞 ...

  5. nodejs之使用express框架连接mongodb数据库

    var express = require('express');var router = express.Router();var app = express();var MongoClient = ...

  6. nodeJS从入门到进阶二(网络部分)

    一.网络服务器 1.http状态码 1xx: 表示普通请求,没有特殊含义 2xx:请求成功 200:请求成功 3xx:表示重定向 301 永久重定向 302 临时重定向 303 使用缓存(服务器没有更 ...

  7. MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

    这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...

  8. 前端笔记之NodeJS(四)MongoDB数据库&Mongoose&自制接口&MVC架构思想|实战

    一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...

  9. NodeJs连接操作MongoDB数据库

    NodeJs连接操作MongoDB数据库 一,介绍 MongoDB是一种文档导向数据库管理系统,由C++撰写而成.介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作. Mongo ...

随机推荐

  1. 命令行利用ffmpeg实现rtmp推流《转》

    ffmpeg在以前介绍过,是一个相当强大的工具,我们这次利用它实现rtmp推流(最终推流地址统一为rtmp://127.0.0.1:1935/live/123). 1.首先下载ffmpeg和ffpla ...

  2. python mysql数据库压力测试

    python mysql数据库压力测试 pymysql 的执行时间对比 1,装饰器,计算插入1000条数据需要的时间 def timer(func): def decor(*args): start_ ...

  3. 荔枝派nano例子

    买回来,先短接flash芯片的14脚,然后上电,再断开14脚,开始怎么折腾都不行,最后发现是android线的问题,换成jlink ob送的android线就能找到设备了,真崩溃 lsusb,应该能看 ...

  4. WebGL学习笔记(十三):拾取

    目前为止,我们还没有涉及到交互相关的内容,实际上,我们是需要知道我们点击的地方下面的第一个物体的信息,这个过程称为拾取. 简单拾取实现 我们可以通过颜色来获取是否成功点击,具体方式如下: 场景中有一个 ...

  5. PHP Y2K38 (2038年) 问题

    PHP 的 strtotime('2100-01-01'); 转换失败:经查询是因为32位系统的 Y2K38问题: Y2K38 问题:当时间大于 2038年01月19日03:14:07 时,strto ...

  6. 查找算法(6)--Block search--分块查找

    1. 分块查找 (1)说明分块查找又称索引顺序查找,它是顺序查找的一种改进方法. (2)算法思想:将n个数据元素"按块有序"划分为m块(m ≤ n).每一块中的结点不必有序,但块与 ...

  7. 【GMT43智能液晶模块】例程十八:LAN_HTTP实验——网页服务器

    源代码下载链接: 链接:https://pan.baidu.com/s/1sr4a7TBPyvs18jTfCfVj8Q 提取码:jwfv 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...

  8. 带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc

    如果头文件中有多个类,带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc

  9. mysql中字符串的隐藏字符处理

    三步解决mysql字符串的隐藏字符: 1. 隐藏字符导致字符串长度边长,用mysql 自带的 Hex函数让隐藏字符显示真身, 2. 可以拿到隐藏字符的16进制码,然后用windows自带的计算器转化成 ...

  10. @vue/cli 4.1.1安装

    按照安装步骤,先卸载,再安装,最终,查看vue -V 的版本都是3.8.2,也就是说并没有安装成功,于是,考虑用yarn去安装 1,首先清除缓存: yarn cache clean 2,yarn设置淘 ...