nodeJS从入门到进阶三(MongoDB数据库)
一、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、数据库常用操作
(1)、进入数据库管理模式
- 在命令行中运行:mongo 进入数据管理模式
- 在数据管理模式中只能执行数据库命令,不能执行其他命令
exit 退出数据库管理模式
(2)、常用命令
- 数据库命令:
- a.显示所有的数据列表
show dbs - b.创建数据库/进入数据库
use 数据库名
如果数据库名不存在,则创建
如果数据库已存在,则进入 - c.查看当前数据库是谁
db - d.删除数据库
db.dropDatabase()
- a.显示所有的数据列表
- 集合命令:
- a.显示当前数据库中所有集合
show collections - b.创建集合
db.集合名.insert({})
通常,在创建数据时自动创建集合,不需要单独创建 - c.删除集合
db.集合名.drop()
- a.显示当前数据库中所有集合
- 文档(数据)的操作(【重点】)
- a.新增文档(数据)
- db.集合名.insert({JSON数据})
- db.集合名.save({JSON数据})
例如:
```javascript
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({查找对象,修改结果})
- 例如:
javascript db.user.update({"name":"张三"},{"age":18}) //改动整条数据
- d.删除数据
- db.集合名.remove({}) //删除当前集合中的所有数据
- db.集合名.remove({条件}) //删除指定的数据
例如:
```javascript
db.user.remove({"age":"18"})// 注意:由于删除和更新会对数据造成极大影响,需谨慎
```
- a.新增文档(数据)
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操作数据库
概念
是一个基于nodeJS的用于操作mongodb数据库的第三方模块
安装
npm install mongoose
使用
- 1.连接数据库
mongoose.connect("mongodb://主机名:端口号/数据库名", function(err){
if(err){
throw err;
}else{
console.log("数据库连接成功")
}
})
- 2.定义骨架
- 概述
- schema骨架是一种数据结构声明,不具备数据库的操作能力
- 语法:
javascript var schema = new mongoose.Schema({ 字段名:类型, ... })
- 骨架类型:String、Number、Date、Buffer、ObjectId、Array...
- 概述
- 3.创建模型
- 概述
- model模型是一种根据骨架创建出的一个模型,具备数据库操作能力,通常用于读取数据库
- 语法
javascript var listModel = mongoose.model("模型名称","骨架","集合名称");
- 概述
- 4.创建实体Entity
- 概述
- Entity实体是根据模型创建出的一个实例,具备数据库操作能力,通常用于写数据(新增,修改,删除)
var list = new listModel(); list.属性名 = 值; list.save(); //将添到实例上的属性保存到数据库中 list.remove();//删除数据
数据操作
- 概述
1、查询数据/读取数据
```javascript
//根据条件进行数据查询,可以找出多条数据
模型.find({条件},function(err,data){
//data是从数据库中读取到的数据
//find方法找出来的数据一定是一个数组,即使没有数据也是一个空数组
})//通过ID查找一条数据
//另一种常用方法(为了实现更好的链式调用)
模型.findById('id',function(err,data){
//find方法找出来的数据一定是一个对象
})
模型.find({条件}).exec(function(err,data){
})
```2、新增数据
```javascript
var list = new listModel(); //根据模型创建实例
list.name = '张三';
list.age =23;
//将新增的数据保存到数据库中
list.save(function(err){
console.log("新增成功");
})//注意:骨架中没有定义的属性及类型,不能添加到数据库
```3、删除数据
javascript /* 思想: 第一步:找出要被删除的数据, 第二部:调用remove()方法删除数据 */
原文地址:https://www.cnblogs.com/sgs123/p/11451270.html
- Java数组赋值
- 10.12 firewalld和netfilter
- 10.11 Linux网络相关
- 利用Crypto++实现RSA加密算法
- 重学javascript 红皮高程(6)
- WriteUp分享 | LCTF的一道preg_match绕过+出题人的锅
- 利用crypto++库实现AES加密算法
- Android之倒计时CountdownTimer用法
- WriteUp分享 | LCTF的一道padding oracle攻击+sprintf格式化字符串导致的SQL注入
- 10.27 target介绍
- Android 之游戏开发流程
- shell脚本后台运行
- Android的.so文件你需要知道那些知识
- xshel配色方案
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 二、类加载器与类初始化深度剖析
- PAT (Basic Level) Practice (中文)1030 完美数列 (25 分)
- 八皇后递归实现
- PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
- PAT (Advanced Level) Practice 1021 Deepest Root (25 分)
- ESlint + stylelint + VSCode自动格式化代码(2020)
- PAT (Basic Level) Practice (中文)1032 挖掘机技术哪家强 (20 分)
- PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分)
- PAT (Basic Level) Practice (中文)1034 有理数四则运算 (20 分)
- 移动端开发的几点建议
- 数据结构题集(严书)图 常见习题代码
- PAT (Basic Level) Practice (中文)1036 跟奥巴马一起编程 (15 分)
- PAT (Advanced Level) Practice 1024 Palindromic Number (25 分)
- Flink 连接 hive 解决 java.net.UnknownHostException
- PAT (Advanced Level) Practice 1147 Heaps (30 分)