一、两种主流的数据库

关系型数据库

非关系型数据库

SQL 就是 Structor Query Language 结构化查询语言。典型的关系型数据库最大的优点就是主从查找。。

缺点,就是限制字段,表的字段是不能自由更改的,不能某一个条目有一些字段,另外的条目的没有。

于此相比 MongoDB 就灵活的多了。

二、MongoDB 安装和指导

非常简单,简单的令人发指。

1.芒果数据库,官网:https://www.mongodb.com/

下载可以选择 zip 格式或者 msi 格式,msi 格式就是下一步、下一步安装。我们讲解 zip格式。

解压缩这个文件夹,千万不要有中文路径

解压之后找到你的 bin 文件夹,再次确认没有中文路径。

将这个bin 文件夹路径设置为系统的环境变量。

在系统任何盘符下能够输入mongo命令不会报“mongo不是可以执行的命令”错误。说明你已经成功安装。

学习教程查找:

1

2

3

4

三、数据库的基本操作

要找一个地方建立文件夹存储数据库。我建的文件夹名为 database。

首先需要使用 mongod 来“开机”,表示打开数据库。用 mongod 来开机。

开机命令:

mongod --dbpath D:/mongodb/database

--dbpath表示数据库的路径。

此时光标是挂起状态的。

等待连接,提示如下:

2019-08-06T21:57:16.391+0800 I NETWORK [initandlisten] waiting for connections

on port 27017

补充如果连接了显示0 connections now open 如果没连接数据库了显示1 connections now open

2019-08-06T22:00:32.272+0800 I NETWORK [conn1] end connection 127.0.0.1:49588 (

0 connections now open)

2019-08-06T22:00:41.539+0800 I NETWORK [listener] connection accepted from 127.

0.0.1:49589 #2 (1 connection now open)

此时注意,这个CMD窗口不能关闭,一关闭CMD窗口,数据库就关闭了。

再打开一个新的CMD窗口:输入 mongo 就能进入 mongo 的 REPL 环境(Read-Eval-Print-Loop,读一句、执行一句、显示一句)

我输入 100 + 99 回车计算输出结果如下

操作数据库就是在 REPL 里面操作的。

在REPL环境中:

> use student

这行语句表示使用 student 数据库,此时没有 student 数据库,MongoDB会帮我们自动创建。

此时我们试着插入一条数据:

> db.class1.insert({"people":57,"gir":38,"boy":19})

提示成功写入一条数据

class1 这个集合完全可以当做,student 这个数据库的表。

>db.class1.find()

此时我们想查看这条数据:

四、看看 NodeJS 和 MongoDB 怎样连接

基本连接

新建一个 nodedb 文件夹,安装依赖,需要注意的是如果安装最新版的会发出警告:

(node:4488) DeprecationWarning: current URL string parser is deprecated, and wil

l be removed in a future version. To use the new parser, pass option { useNewUrl

Parser: true } to MongoClient.connect.

版本问题,测试结果如下:

本人实测node安装Mongodb不警告,最高版本3.0.9.png

安装依赖并指定版本:

npm install --save mongodb@3.0.9

补充个知识点 node 内置 assert (断言)的用法

在 01.js 文件输入以下内容,node 01.js 运行

const assert = require("assert");

let a = 1438;

console.log("如果assert.equal()里面的两个参数相等,就会输出五角星")

assert.equal(a,1438);

console.log("☆☆☆☆☆☆☆☆");

assert.equal()里面的两个参数相等,后面的语句成功执行。

现在改变以下:

const assert = require("assert");

let a = 1438;

console.log("如果assert.equal()里面的两个参数相等,就会输出五角星")

assert.equal(a,"你是三八");

console.log("☆☆☆☆☆☆☆☆");

assert.equal()里面的两个参数不相等,成功报错,后面的语句不执行。其中相等比较包含隐式转换。

// 引入mongodb

const MongoClient = require('mongodb').MongoClient;

// 断言为下面的连接状态返回结果是true还是false准备

const assert = require('assert');

// Connection URL数据库连接网址

const url = 'mongodb://localhost:27017';

// Database Name数据库名,没有会自动创建

const dbName = 'class';

// Create a new MongoClient实例化这个方法

const client = new MongoClient(url);

// Use connect method to connect to the Server

// 连接数据库

client.connect(function(err) {

//如果连接错误则会抛出错误,不在执行此语句的下面的语句

assert.equal(null, err);

// 上面的语句没有错误,则显示正确连接

console.log("Connected successfully to server");

// 连接database这个数据库

const db = client.db(dbName);

// ============数据库操作区域===================

// 关闭数据库连接

client.close();

// ============数据库操作区域===================

});

引入文档内容添加注释,然后 node 返回结果成功!完美。

数据库成功连接

不过的提一句,断言 assert 打断程序,因为直接刨一个错误,也不给提示,不很友好所以使用 if 替代是比较好的方案。

五、集合和文档的概念

数据库由集合组成,集合就是 JSON 的集合,每一条 JSON 叫做一个文档。

集合:

collection

文档:

JSON

MongoDB 用 JSON 来存储数据。可以想当然的认为一个 JSON 就是一个 document ,一个 document (文档)就是一个表。

六、node 操作 MongoDB进行增删查改

6.1 、增

增加多条insertMany([],callback)

增加我所有女朋友的列表。嘻嘻嘻嘻

// 引入mongodb

const MongoClient = require('mongodb').MongoClient;

// Connection URL数据库连接网址

const url = 'mongodb://localhost:27017';

// Database Name数据库名,没有会自动创建

const dbName = 'class';

// Create a new MongoClient实例化这个方法

const client = new MongoClient(url);

// Use connect method to connect to the Server

// 连接数据库

client.connect(function(err) {

//如果连接错误则会抛出错误,不在执行此语句的下面的语句

if(err){

console.log("程序运行出错,有可能你没有使用(mongod --dnpath D:/mongod/database)打开数据库")

return;

}

// 上面的语句没有错误,则显示正确连接

console.log("Connected successfully to server");

// 连接database这个数据库

const db = client.db(dbName);

// ============数据库操作区域===================

db.collection("students").insertMany([

{"class":"高一一班","name":"花月","sex":"girl","age":19,"height":"170","weight":45},

{"class":"高一二班","name":"紫萱","sex":"girl","age":17,"height":"168","weight":48},

{"class":"高一三班","name":"佳宁","sex":"girl","age":20,"height":"164","weight":46},

{"class":"高一一班","name":"香巧","sex":"girl","age":19,"height":"169","weight":50},

{"class":"高一一班","name":"惜玉","sex":"girl","age":17,"height":"157","weight":52},

{"class":"高一四班","name":"雅静","sex":"girl","age":16,"height":"160","weight":43},

{"class":"高一一班","name":"玥婷","sex":"girl","age":18,"height":"162","weight":56},

{"class":"高一四班","name":"诗琪","sex":"girl","age":19,"height":"163","weight":58},

{"class":"高一一班","name":"欣怡","sex":"girl","age":20,"height":"164","weight":55},

{"class":"高一一班","name":"玥怡","sex":"girl","age":19,"height":"163","weight":48},

{"class":"高一四班","name":"梦瑶","sex":"girl","age":17,"height":"161","weight":45},

{"class":"高一一班","name":"怜雪","sex":"girl","age":19,"height":"162","weight":46},

{"class":"高一二班","name":"安婷","sex":"girl","age":21,"height":"163","weight":41},

{"class":"高一五班","name":"怡瑶","sex":"girl","age":20,"height":"164","weight":52},

{"class":"高一一班","name":"韵茹","sex":"girl","age":16,"height":"165","weight":51},

{"class":"高一一班","name":"念蕾","sex":"girl","age":19,"height":"166","weight":43},

{"class":"高一五班","name":"一萌","sex":"girl","age":20,"height":"160","weight":42},

{"class":"高一一班","name":"凌旋","sex":"girl","age":21,"height":"159","weight":51},

{"class":"高一二班","name":"芷梦","sex":"girl","age":22,"height":"171","weight":57},

{"class":"高一一班","name":"紫夏","sex":"girl","age":15,"height":"168","weight":56},

{"class":"高一一班","name":"芸萱","sex":"girl","age":16,"height":"165","weight":56},

{"class":"高一五班","name":"靖瑶","sex":"girl","age":15,"height":"164","weight":48}

],function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

//result是所有的数据库变动信息,result以对象方式存储的,ops属性就是插入的数据

//insertedCount属性表示插入的条目数量

console.log("成功插入了" + result.insertedCount + "条数据");

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

});

运行结果

继续输入 Mongo 进入数据库的 REPL 查看插入结果:

插入一条数据inserOne({},callback)

// 引入mongodb

const MongoClient = require('mongodb').MongoClient;

// Connection URL数据库连接网址

const url = 'mongodb://localhost:27017';

// Database Name数据库名,没有会自动创建

const dbName = 'class';

// Create a new MongoClient实例化这个方法

const client = new MongoClient(url);

// Use connect method to connect to the Server

// 连接数据库

client.connect(function(err) {

//如果连接错误则会抛出错误,不在执行此语句的下面的语句

if(err){

console.log("程序运行出错,有可能你没有使用(mongod --dnpath D:/mongod/database)打开数据库")

return;

}

// 上面的语句没有错误,则显示正确连接

console.log("Connected successfully to server");

// 连接database这个数据库

const db = client.db(dbName);

// ============数据库操作区域===================

db.collection("students").insertOne(

{"class":"高一零班","name":"不悔","sex":"girl","age":18,"height":"165","weight":46}

,function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

//result是所有的数据库变动信息,result以对象方式存储的,ops属性就是插入的数据

//insertedCount属性表示插入的条目数量

console.log("成功插入了" + result.insertedCount + "条数据");

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

});

插入一条数据

查询结果:

查询结果

6.2、 删deleteMany({},callback)

// 引入mongodb

const MongoClient = require('mongodb').MongoClient;

// Connection URL数据库连接网址

const url = 'mongodb://localhost:27017';

// Database Name数据库名,没有会自动创建

const dbName = 'class';

// Create a new MongoClient实例化这个方法

const client = new MongoClient(url);

// Use connect method to connect to the Server

// 连接数据库

client.connect(function(err) {

//如果连接错误则会抛出错误,不在执行此语句的下面的语句

if(err){

console.log("程序运行出错,有可能你没有使用(mongod --dnpath D:/mongod/database)打开数据库")

return;

}

// 上面的语句没有错误,则显示正确连接

console.log("Connected successfully to server");

// 连接database这个数据库

const db = client.db(dbName);

// ============数据库操作区域===================

db.collection("students").deleteMany(

{"class":"高一零班","name":"不悔"}

,function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

//deletedCount 属性表示删除的条目数量

console.log("成功删除了" + result.deletedCount + "条数据");

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

});

{"class":"高一零班","name":"不悔"},删除我所有在高一零班且名叫不悔的女朋友。

测试结果:

再次查询

{"class":"高一零班","name":"不悔","sex":"girl","age":18,"height":"165","weight":46}

这个数据没了。成功删除!

6.3、改

updateOne({},{$set:{}},callback) 和 replaceOne

匹配第一个班级为高一一班的把她变性为男孩

// ============数据库操作区域===================

db.collection("students").replaceOne(

{"class":"高一一班"},{"sex":"boy"}

,function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

console.log("成功匹配"+result.matchedCount+"个,一共修改了"+ result.modifiedCount +"个")

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

提示:以前我用 updateOne 直接修改,例如:{"class":"高一一班"},{"sex":"boy"} 这个 JSON 数据其他未改的项会消失,现在不能这么写了。会提示:

MongoError: the update operation document must contain atomic operators

这个问题查了老半天,百度的搜索结果太垃圾了。使用微软的 bing 马上得到结果:

来源网址:

我认为这更改为引入updateOne()方法以及update()和updateMany()的副作用,作为一种防止用户意外覆盖整个文档的安全措施。

更改动作必须包含原子操作符;什么是原子操作符就是 $set 这种,看演示。

我们把上面那个想不开变了性的女孩再给改回来。

// ============数据库操作区域===================

db.collection("students").updateOne(

{"class":"高一一班"},{$set:{"sex":"girl"}}

,function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

console.log("成功匹配"+result.matchedCount+"个,一共修改了"+ result.modifiedCount +"个")

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

从结果上来看 updateOne 和 replaceOne 功能上没什么不同就是写法稍有不同。

更改多个 updateMany({},{},callback)

现在班级为高一一班的女孩全想不开非要去变性:

// ============数据库操作区域===================

db.collection("students").updateMany(

{"class":"高一一班"},{$set:{"sex":"boy"}}

,function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

console.log("成功匹配"+result.matchedCount+"个,一共修改了"+ result.modifiedCount +"个")

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

查看输出结果:

输出结果

查看数据库结果:

一共十一个

6.4、查

查询所有 find()toArray(function)

// ============数据库操作区域===================

db.collection("students").find().toArray(function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

console.log("成功查询了" + result.length + "条信息");

// 查询所有的JSON将会放在result这个数组里面

console.log(result);

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

查看输出的 22 条结果:

输出结果

且逻辑查询:(逗号表示且)

找出年级是高一一班且年龄为16 的所有人。

// ============数据库操作区域===================

db.collection("students").find({"class":"高一一班","age":16}).toArray(function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

console.log("成功查询了" + result.length + "条信息");

// 查询所有的JSON将会放在result这个数组里面

console.log(result);

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

年级是高一一班且年龄为16

大于逻辑查询

找出身高大于 165 且体重大于 55 的人。

// ============数据库操作区域===================

db.collection("students").find({"height":{$gt:"165"},"weight":{$gt:55}}).toArray(function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

console.log("成功查询了" + result.length + "条信息");

// 查询所有的JSON将会放在result这个数组里面

console.log(result);

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

身高大于 165 且体重大于 55

大于(gt)小于(lt)等于(eq)都是使用的原子操作符。

或逻辑查找 {$or:[{},{},{}]}

寻找年龄小于 16 或 体重小于 43 的所有人

// ============数据库操作区域===================

db.collection("students").find({$or:[{"age":{$lt:16}},{"weight":{$lt:43}}]}).toArray(function(err,result){

//抛出一个错误

if(err){

console.log(err)

return;

}

console.log("成功查询了" + result.length + "条信息");

// 查询所有的JSON将会放在result这个数组里面

console.log(result);

// 关闭数据库连接

client.close();

});

// ============数据库操作区域===================

年龄小于 16 或 体重小于 43

五、总结

MongoDB REPL 常用命令:

显示所有的数据库

> show dbs

使用某个(class)数据库

> use class

显示当前数据库的所有表(文档)

> show collections

查询当前数据对应的 student 表的数据

> db.students.find()//find()里面可加入 JSON作为筛选条件

给表插入一一些数据

> db.students.insert({})

删库

> db.dropDatabase()

删表

> db.students.drop()

导入数据库

我再在 D:\mongodb\nodedb 新建一个 students.txt 文件,文件内容如下:

students.txt

打开数据库:

>mongod --dbpath D:/mongodb/database

现在往 dbs 这个数据库里面的 class 表导入我们的 students.txt 数据。

mongoimport -d dbs -c class D:/mongodb/nodedb/students.txt

2019-08-07T14:07:29.130+0800 connected to: localhost

2019-08-07T14:07:29.526+0800 imported 22 documents

-d 参数表示需要往哪个数据库中导入数据

-c 参数表示需要往哪个集合(表)中导入数据

提示你成功的导入了 22 条文档:

注意的是:数据库仍然要维持开机状态。但千万不要进入REPL中输入命令mongoimport 导入命令!

导出数据库

mongoexport -d dbs -c class -o 1.txt

其中 -o 是 output 的意思。

前面没讲 MongoDB 的优点。 MongoDB 是非结构型数据库。比 SQL 的地方在于不限制字段,每个条目(MongoDB中称为文档,一个文档就是一个标准JSON)都可以有自己的字段。而我们在操作数据用到最多的就是 JSON 格式的数据。

完。。。

芒果db怎么连mysql_MongoDB 芒果数据库的使用相关推荐

  1. Atitit db analysis statistics tonjyi fsy数据库统计分析目录1. Atitit 数据库表与注释文档与统计(表,说明) 11.1. 获取表列表 数据库包含哪些

    Atitit db analysis statistics tonjyi fsy数据库统计分析 目录 1. Atitit 数据库表与注释文档与统计(表,说明)    1 1.1. 获取表列表 数据库包 ...

  2. oracle 芒果db,TIMER+TISIDB分析肿瘤免疫浸润

    生信论文的套路 ONCOMINE从全景.亚型两个维度做表达差异分析: 临床标本从蛋白水平确认(或HPA数据库),很重要: Kaplan-Meier Plotter从临床意义的角度阐明其重要性: cBi ...

  3. 图解MyEclipse用DB Browser连接四种数据库

    所用到的jar包下载: http://pan.baidu.com/s/1skFeGVj 一 连接Oracle 在MyEclipse中打开DB Browser:右键,新建: 连接Oracle用到的jar ...

  4. db,dbms,dba_DBMS中的数据库管理员(DBA)

    db,dbms,dba 数据库管理员(DBA) (Database Administrator (DBA)) To use the Database Management System, it is ...

  5. 芒果云接吗_芒果糯米饭是生产力的关键吗?

    芒果云接吗 Would you like to know how your mood impact your sleep and how your parents influence your hap ...

  6. Pannel DB支持定时文件、数据库备份、系统防御、监控告警、中间件安装

    作为运维人员或个人站长我们可能要维护一个甚至多个网站,难免会遇到多个服务器,更加难免的就是数据备份.服务器防御.监控告警等问题,尤其是多台服务器,更加的麻烦- Panel DB是一款免费.支持多系统. ...

  7. mysql中db的名词解释_数据库常用名词解释大全

    ◆DB:数据库(Database), DB是统一管理的相关数据的集合.DB能为各种用户共享,具有最小冗余度,数据间联系密切,而又有较高的数据独立性. ◆超键:在关系中能唯一标识元组的属性集称为关系模式 ...

  8. mysql中db的名词解释_数据库原理名词解释

    名词解释 实体有联系,反之型DML. 关系中元组在将SQL语句嵌涉及到U中属性1 DB是统一管理亦然,则称实体集嵌入在宿主语组成主键的属性入在高级语言的的函数依赖集,如的相关数据的集E1对E2的联系言 ...

  9. 【DB宝46】NoSQL数据库之CouchBase简介、集群搭建、XDCR同步及备份恢复

    文章目录 一. CouchBase概述 1.1.简述 1.2.CouchDB和CouchBase比对 1.2.1.CouchDB和CouchBase的相同之处 1.2.2.CouchDB和CouchB ...

  10. 为什么显示芒果tv服务器异常怎么办,芒果tv打不开怎么办 芒果tv打不开解决方法...

    大家经常使用芒果tv看电视直播或者热播电视剧,小编也不例外,相信有的朋友遇到过芒果tv打不开的情况.下面小编就为大家分享几个芒果tv打不开的解决方法 原因一:DNS服务器被劫持导致芒果TV直接打不开. ...

最新文章

  1. python信息找人的算法_算法篇-python查找算法
  2. g标签 怎么设置svg_SVG g元素
  3. Ethercat解析(十四)之初始化流程
  4. 触底事件_福建双外到位欲触底反弹,李宁回应易建联扔鞋事件,吉林主帅表态...
  5. c语言的point函数,C语言中friend友元函数详细解析
  6. 华为交换机stp原理透析及实战
  7. python机器学习库教程——结巴中文分词
  8. java io 创建临时文件,用Java创建一个指定的临时文件
  9. HTML 标签的 target 属性
  10. 【动态主席树】ZOJ 2112【树状数组+主席树】
  11. 移动应用发展现状_移动应用开发平台:现状和趋势
  12. 解决PHPstudy(PHP工具箱)中host文件无法保存的问题
  13. Cocos Creator如何制作3D微信小游戏教程
  14. js内置对象方法笔记 js内置函数
  15. Spring Cloud 系列之 Netflix Eureka 注册中心
  16. 题解 P1894 【[USACO4.2]完美的牛栏The Perfect Stall】
  17. 关于Mysql中的生日提醒
  18. 99%的游戏建模师不知道的ZBrush的15个建模技巧
  19. Linear Regression Logistic Regression
  20. 测试百科:白盒测试用例的设计(图文并茂,非常详细)

热门文章

  1. 2020年大数据营销案例_大数据营销案例分析
  2. 机器人工程师学习计划(计算机相关专业学习计划)
  3. html5扫雷代码,使用js开发网页版 扫雷(附代码详解)
  4. 递归算法php,php递归算法经典实例
  5. vue3结合element-plus实现标签手动标注效果
  6. python如何读二进制文件_Python如何读写二进制文件
  7. IOS软件工程师课程分享
  8. 富士施乐打印机双面打印设置方法
  9. 什么是servlet及其生命周期
  10. c 转时间戳php,php日期转时间戳,指定日期转换成时间戳 筋斗云网络