陈书书 發表於 2017-6-15 11:29:00

node.js零基础详细教程(6):mongodb数据库操作 以及导入导出

<p>第六章 建议学习时间4小时 &nbsp;课程共10章</p>
<p>学习方式:详细阅读,并手动实现相关代码</p>
<p><strong>学习目标</strong>:此教程将教会大家 安装Node、搭建服务器、express、mysql、mongodb、编写后台业务逻辑、编写接口,最后完成一个完整的项目后台,预计共10天课程。</p>
<p>&nbsp;</p>
<p><span style="font-size: 18px"><strong>数据库</strong></span></p>
<hr>
<p>&nbsp;</p>
<p>数据库管理结构,一般分为两种:B/S架构 &nbsp; C/S架构。</p>
<p>B/S架构: &nbsp;Browser/Server,浏览器/服务器模式,即通过浏览器和服务器端的数据库进行交互</p>
<p>C/S架构: &nbsp;Client/Server,客户端/服务器模式,即通过客户端和服务器的数据库进行交互(我们使用的cmd命令行就可以算是一个客户端)</p>
<p>&nbsp;</p>
<p>数据库根据数据结构分为:关系型数据库和非关系型数据库</p>
<p>关系型数据库就如一般很规整的表格,可以根据横向纵向去定位某条数据,如下图</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615091445665-1147904136.png"></p>
<p>一般的数据库都是关系型数据库 ,如 mySQL,oracle</p>
<p>而非关系型数据库是不能通过横向纵向去定位一条数据,它的结构更像是一个数组里放了很多个json数据,如下图</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615091621087-730034814.png"></p>
<p>我们即将学习的mongodb就是非关系型数据库</p>
<p>&nbsp;</p>
<p>当下比较火的数据库有:oracle、mySQL、SQL Server</p>
<p>相比这些数据库,mongodb有体积小、能方便快捷的操作,很适合中小型项目的快速开发</p>
<p>而且它可以很好的配置node.js使用 &nbsp;(node.js也可以操作其他的数据库,以后有时间会单独给大家介绍 &nbsp;node.js操作 mySQL)</p>
<p>&nbsp;</p>
<p><strong>mongodb安装</strong></p>
<hr>
<p>&nbsp;</p>
<p>1.在官网上下载所需的安装软件</p>
<p>&nbsp;本课程软件下载 链接:http://pan.baidu.com/s/1kVPxBJT 密码:uziu</p>
<p>下载地址:<span style="text-decoration: underline">https://www.mongodb.com/download-center#community</span></p>
<p>根据所需下载相应版本的mongodb安装包</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094312900-492730576.png"></p>
<p>双击安装包后,点击运行</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094339743-1935053947.png"></p>
<p>进入到mongodb的安装页面,<span style="font-family: 微软雅黑">点击</span>Next进行下一步</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094355400-907183212.png"></p>
<p>选择<span style="font-family: 微软雅黑">同意后,点击</span>Next进行下一步</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094416493-961015267.png"></p>
<p>在<span style="font-family: 微软雅黑">这里不建议改变安装目录,直接点击</span>Complete进行下一步</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094428040-1408665156.png"></p>
<p>点击Install进行安装</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094438603-1118190143.png"></p>
<p>等待安装的进度条完成</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094450071-1895489706.png"></p>
<p>安装的进度条完成之后,会进入完成页面,<span style="font-family: 微软雅黑">点击</span>Finish 就完成了mongodb数据库的安装</p>
<p>&nbsp;</p>
<p>&nbsp;<img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094509571-1599319642.png"></p>
<p>完成已上为步骤,就安装成功了</p>
<p>&nbsp;</p>
<p>2.<span style="font-family: 微软雅黑">检测m</span>ongodb是否安装成功,并配置启动命令</p>
<p><span style="font-family: 微软雅黑">在m</span>ongodb的安装目录的bin<span style="font-family: 微软雅黑">目录下,打开</span>cmd命令行,输入<span style="font-family: 微软雅黑">命令</span> ‘ mongod –help ’出现下图现在这安装成功</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094550150-1740572637.png"></p>
<p>设置数据和日志的储存位置和配置mongodb服务</p>
<p>(1)设置数据文件和日志文件储存位置</p>
<p>按自己的爱好设置文件的储存位置,本安装文档的<span style="font-family: 微软雅黑">储存位置设置在</span>E盘,目录如下</p>
<p>E:\MongoData</p>
<p>├─data &nbsp;&nbsp;#MongoDB数据库中的数据的储存位置</p>
<p>└─log &nbsp;&nbsp;&nbsp;#MongoDB数据库中的日志的储存位置</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;└─mongodb.log &nbsp;&nbsp;# MongoDB数据库中的日志的储存文件 &nbsp; (创建方式:创建一个txt,把后缀名改为log)</p>
<p>(2)<span style="font-family: 微软雅黑">配置m</span>ongodb服务</p>
<p>&nbsp; &nbsp; 1/<span style="font-family: 微软雅黑">设置</span>mongodb的环境变量</p>
<p>&nbsp; &nbsp; 计算机&gt;右键&gt;<span style="font-family: 微软雅黑">属性</span>&gt;高级<span style="font-family: 微软雅黑">系统设置</span>&gt;环境<span style="font-family: 微软雅黑">变量</span>&gt;找到<span style="font-family: 微软雅黑">系统变量中的</span>path变量</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; 向path变量的结尾处添加mongodb的安装目录下bin目录的地址(如果原来的path路径后面没有分号,需要添加一个英文的分号再添加mongodb的目录)</p>
<p>&nbsp; &nbsp; 如果按本文档安装的mongodb安装目录下bin目录为:</p>
<p>&nbsp; &nbsp; C:\Program Files\MongoDB\Server\3.4\bin</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615094804478-1168438624.png"></p>
<p>&nbsp; &nbsp;&nbsp;设置完成后依次点击确定,就设置好了mongodb的环境变量了</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; 2/<span style="font-family: 微软雅黑">安装</span>mongodb服务</p>
<p>&nbsp; &nbsp;&nbsp;</p>
<p>&nbsp; &nbsp; 第一步:按照设置的储存位置,修改下面的命令</p>
<p>&nbsp; &nbsp; (ps:如果是按本文档设置的储存位置,不用在做更改)</p>
<div class="cnblogs_code">
<pre>mongod --logpath "E:\MongoData\log\mongodb.log" --logappend --dbpath "E:\MongoData\data" --directoryperdb --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install</pre>
</div>
<p>#命令中字段的说明</p>
<p>***&nbsp;&nbsp;--logpath &nbsp;&nbsp;指定MongoDB日志文件的存储路径,注意是指定文件不是目录</p>
<p>***&nbsp;&nbsp;--logappend &nbsp;使用追加的方式写日志</p>
<p>*** &nbsp;--dbpath &nbsp;&nbsp;指定数据库数据的存储路径</p>
<p>*** &nbsp;--directoryperdb &nbsp;每个DB都会新建一个目录</p>
<p>*** &nbsp;&nbsp;--serviceName &nbsp;&nbsp;指定服务名称</p>
<p>*** &nbsp;--serviceDisplayName &nbsp;指定服务名称,有多个mongodb服务时执行。</p>
<p>*** &nbsp;--install &nbsp;指定作为一个Windows服务安装。</p>
<p>&nbsp; &nbsp;&nbsp;第二步:在开始处用管理员身份<span style="font-family: 微软雅黑">打开</span>cmd命令行,输入上面第一步修改好的指令回车<span style="font-family: 微软雅黑">(</span>ps:一定要以管理员身份运行),(运行完成没有任何错误提示,表示设置成功)</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615095232446-1273285297.png"></p>
<p>&nbsp; &nbsp;&nbsp;</p>
<p>&nbsp; &nbsp; 第三步:启动mongodb服务</p>
<p>&nbsp; &nbsp;&nbsp;Net&nbsp;start MongoDB</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615095009728-989164246.png"></p>
<p>&nbsp; &nbsp; 第四步:关闭mongodb服务</p>
<p>&nbsp; &nbsp; Net stop MongoDB</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615095443743-1154124172.png"></p>
<p>&nbsp;</p>
<p><span style="font-size: 18px"><strong>mongodb操作</strong></span></p>
<hr>
<p>&nbsp;</p>
<p>管理员身份运行cmd,然后执行 mongo,进入mongodb的命令状态</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615095633900-1059973624.png"></p>
<p>&nbsp;</p>
<p>&nbsp;show dbs 显示当前的数据库,前面两个是自带的,后面两个是我自己创建的(大家第一次使用时只有前面两个数据库)</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615095845259-1358468179.png"></p>
<p>&nbsp;</p>
<p>&nbsp;use 数据名 &nbsp; &nbsp;切换数据库 或 创建新的数据库, &nbsp;下面我创建了一个名为demo3的数据库</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615100024243-533885362.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;db.createCollection("表名字") &nbsp; 向数据库里面添加表 &nbsp;,下面 创建了一个表 t1</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615100314384-623717066.png"></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">db 显示当前正在使用的数据库</span></p>
<p>show tables 显示数据库下的表 &nbsp;</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615101210118-1344220699.png"></p>
<p>&nbsp;</p>
<p>再创建一个表 t2</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615101418806-1626027752.png"></p>
<p>&nbsp;</p>
<p>db.表名.drop() &nbsp;<span style="font-family: 宋体">用来从数据库中删除一个表</span></p>
<p><span style="font-family: 宋体">下图命令删除了 t1表,返回true表示删除成功,再显示表的时候 t1就没有了</span></p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615101458993-1593955736.png"></p>
<p>db.dropDatabase() 删除当前正在使用的数据库</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615101657290-320446619.png"></p>
<p>上图删除了 demo3, 然后显示数据库的时候就没有demo3了</p>
<p>&nbsp;</p>
<p>我们重新创建 demo3数据库,然后插入 t1表,然后插入数据</p>
<p>插入数据&nbsp;&nbsp;db.<span style="font-family: 宋体">表名</span><span style="font-family: Calibri">.insert({}); &nbsp;&nbsp;</span><span style="font-family: 宋体">参数中传入</span><span style="font-family: Calibri">json</span><span style="font-family: 宋体">数据,当插入成功以后,系统会自动给数据添加一个独一无二的 _id</span></p>
<p><span style="font-family: 宋体">使用</span> db.<span style="font-family: 宋体">表名</span><span style="font-family: Calibri">.find()</span><span style="font-family: 宋体">查看数据</span></p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615102450306-778566032.png"></p>
<p>查询的时候可以带参数,传入查询的 json即可。下面我们先添加了两条数据(注意:添加的数据name 分别为 zhangsan1 &nbsp;、 zhangsan2,插入不同值方便后面使用),然后实现了带参数和不带参数的查询,结果不同</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615103805071-1833047016.png"></p>
<p>&nbsp;</p>
<p>修改数据&nbsp;update({<span style="font-family: 宋体">修改的条件</span><span style="font-family: Calibri">},{</span><span style="font-family: 宋体">修改器:</span><span style="font-family: Calibri">{</span><span style="font-family: 宋体">修改内容</span><span style="font-family: Calibri">}},</span><span style="font-family: 宋体">第三个参数,第四个参数</span><span style="font-family: Calibri">)</span></p>
<p><span style="font-family: 宋体">修改器</span><span style="font-family: Calibri">: &nbsp;$set </span><span style="font-family: 宋体">修改</span><span style="font-family: Calibri">&nbsp; &nbsp; $unset</span><span style="font-family: 宋体">删除字段 &nbsp;</span><span style="font-family: Calibri">$inc </span><span style="font-family: 宋体">当于编程语言中的 “</span><span style="font-family: Calibri">+=</span><span style="font-family: 宋体">”</span></p>
<p><span style="font-family: 宋体">第三个参数的意思是,如果不存在</span>update<span style="font-family: 宋体">的记录,是否插入</span><span style="font-family: Calibri">objNew,true</span><span style="font-family: 宋体">为插入,默认是</span><span style="font-family: Calibri">false</span><span style="font-family: 宋体">,不插入。</span></p>
<p><span style="font-family: 宋体">第四个参数 ,</span><span style="font-family: 宋体">默认是</span>false,<span style="font-family: 宋体">只更新找到的第一条记录,如果这个参数为</span><span style="font-family: Calibri">true,</span><span style="font-family: 宋体">就把按条件查出来多条记录全部更新。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">下面我们来修改一条数据,修改器使用 $set</span></p>
<p><span style="font-family: 宋体">运行后下面代码后,我们发现 name为zhangsan的数据中的 age被修改为了50 &nbsp;(原来是25)</span></p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615104610134-1544521175.png"></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">删除数据的字段,使用 $unset</span></p>
<p><span style="font-family: 宋体">下面代码删除了 name为zhangsan 的数据的 age属性 (age后面的属性值任意写,因为是删除,写多少都没有意义,但需要写一个json格式)</span></p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615104852696-1307306915.png"></p>
<p>&nbsp;</p>
<p>&nbsp;+= &nbsp;某条数据,使用$inc &nbsp;</p>
<p>下面代码将 name 为 zhangsan2的数据的 &nbsp;age上叠加10 ,(原来是25,执行以后变成了 35)</p>
<p><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615110435587-518402927.png"></p>
<p>Mongo<span style="font-family: 宋体">中支持使用 </span><span style="font-family: Calibri">js</span><span style="font-family: 宋体">代码,包括申明变量、循环等等</span></p>
<p><span style="font-family: 宋体">下面的循环插入</span>10<span style="font-family: 宋体">条数据。(虽然提示 </span><span style="font-family: Calibri">nInserted</span><span style="font-family: 宋体">:</span><span style="font-family: Calibri">1 </span><span style="font-family: 宋体">,但已经插入了</span><span style="font-family: Calibri">10</span><span style="font-family: 宋体">条数据)</span></p>
<p><span style="font-family: 宋体"><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615110744665-390784656.png"></span></p>
<p>查询就可以看到这10条数据了。</p>
<p>&nbsp;<img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615112542868-1519875637.png"></p>
<p>&nbsp;</p>
<p>查询json支持高级筛选方式 &nbsp;&nbsp;</p>
<p>$lt &nbsp;<span style="font-family: 宋体">小于 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: Calibri">&lt;</span></p>
<p>$gt &nbsp;<span style="font-family: 宋体">大于 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: Calibri">&gt;</span></p>
<p>$gte <span style="font-family: 宋体">大于等于 &nbsp;</span><span style="font-family: Calibri">&gt;=</span></p>
<p>$lte <span style="font-family: 宋体">小于等于 &nbsp;</span><span style="font-family: Calibri">&lt;=</span></p>
<p><span style="font-family: Calibri">如:</span></p>
<p><span style="font-family: Calibri">db.t1.find({age:{$lt:5}}) &nbsp; 就可以查找age小于5的全部数据 </span></p>
<p><span style="font-family: Calibri">db.t1.find({age:{$lt:5,$gt:1}}) &nbsp; 就可以查找age小于5大于1 的全部数据 &nbsp; &nbsp; (多个筛选条件之间使用逗号分隔 &nbsp; &nbsp;)</span></p>
<p><span style="font-family: Calibri"><img src="http://images2015.cnblogs.com/blog/799986/201706/799986-20170615110944368-722779863.png"></span></p>
<p>&nbsp;</p>
<p><strong>导入导出</strong></p>
<p>&nbsp; 导出:mongoexport可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。</p>
<div>&nbsp; 、语法:</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; mongoexport -d dbname -c collectionname -o file --type json/csv -f field</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; 参数说明:</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -d :数据库名</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -c :collection名</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -o :输出的文件名</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --type : 输出的格式,默认为json</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -f :输出的字段,如果-type为csv,则需要加上-f "字段名"</div>
<div>&nbsp; &nbsp; 、示例:</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; mongoexport -d mongotest -c users -o D:/users.json --type json -f&nbsp; "_id,user_id,user_name,age,status"</div>
<p>&nbsp;导入:</p>
<div>&nbsp;、语法:</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; 参数说明:</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -d :数据库名</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -c :collection名</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --type :导入的格式默认json</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -f :导入的字段名</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --file :要导入的文件</div>
<div>&nbsp;</div>
<div>&nbsp; &nbsp;、示例:</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; mongoimport -d mongotest -c users --file&nbsp;D:/users.json&nbsp;--type json</div>
<p>&nbsp;</p>
<p>基本的操作就讲这么多,希望大家把上面的命令都写完。</p>
<p>&nbsp;</p>
<p>明天我们讲解:node.js操作mongodb,及操作方法的封装</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/chengduxiaoc/p/7016135.html
頁: [1]
查看完整版本: node.js零基础详细教程(6):mongodb数据库操作 以及导入导出