我的意思就是你要 發表於 2015-2-11 17:02:00

Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门

<style>.wilson_body { color: rgba(0, 0, 0, 1); font-family: 微软雅黑, PTSans, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; line-height: 110% }
.wilson_body img { padding: 2px; border: 3px solid rgba(242, 245, 244, 1) }
#menu ul { list-style: square }
#menu li { margin: 10px auto }
.wilson_quote { font-style: italic; color: rgba(0, 204, 255, 1); text-decoration: none }
.wilson_body a { color: rgba(0, 204, 255, 1); text-decoration: none }
.wilson_body a:hover { color: rgba(0, 204, 255, 1); text-decoration: underline; background-color: rgba(138, 136, 136, 1) }
.wilson_highlight { color: rgba(0, 204, 255, 1); font-family: 黑体; font-size: 16px; font-weight: lighter }
.wilson_h1 { background: rgba(138, 136, 136, 1); border-radius: 6px !important; box-shadow: 0 0 1px rgba(224, 224, 224, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: rgba(255, 255, 255, 1); font-family: 微软雅黑, 宋体, 黑体, Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 16px 0 !important; padding: 5px 0 5px 20px; text-shadow: 2px 2px 3px rgba(34, 34, 34, 1) }
.wilson_tip { color: rgba(255, 0, 0, 1); font-family: 黑体; font-style: italic; font-weight: 500 }
.wilson_body table { padding: 0; margin-left: 20px }
.wilson_body table th { font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; color: rgba(79, 107, 114, 1); border-right: 1px solid rgba(193, 218, 215, 1); border-bottom: 1px solid rgba(193, 218, 215, 1); border-top: 1px solid rgba(193, 218, 215, 1); letter-spacing: 2px; text-transform: uppercase; text-align: left; padding: 6px 6px 6px 14px; background: no-repeat rgba(202, 232, 234, 1) }
.wilson_body table th.nobg { border-top: 0; border-left: 0; border-right: 1px solid rgba(193, 218, 215, 1); background: none }
.wilson_body table td { border-right: 1px solid rgba(193, 218, 215, 1); border-bottom: 1px solid rgba(193, 218, 215, 1); background: rgba(255, 255, 255, 1); font-size: 14px; padding: 6px 6px 6px 14px; color: rgba(79, 107, 114, 1) }
.wilson_dl_img { width: 30px; height: 30px }
.wilson_dl_text { float: left }</style>
<div class="wilson_body">
<h1 class="wilson_h1">目录</h1>
<div id="menu">
<ul>
<li>简介</li>
<li>MongoDB安装(windows)</li>
<li>MongoDB基本语法和操作入门(mongo.exe客户端操作)
<ul>
<li>库操作</li>
<li>插入</li>
<li>查询</li>
<li>修改</li>
<li>删除</li>
<li>存储过程</li>
</ul>
</li>
<li>nodejs操作MongoDB
<ul>
<li>插入</li>
<li>查询</li>
<li>修改</li>
<li>删除</li>
<li>调用存储过程</li>
</ul>
</li>
<li>写在之后...</li>
</ul>
</div>
<h1 id="node_intro" class="wilson_h1">简介</h1>
<p><strong>  MongoDB</strong>&nbsp;</p>
<p>  开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序;高伸缩性;</p>
<p>  NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshell.cn/articles/5826.html</p>
<p>&nbsp;  &nbsp;官网地址:http://www.mongodb.org/</p>
<p>  API Docs:http://docs.mongodb.org/manual/</p>
<p><strong>  node-mongodb-native</strong></p>
<p>  mongodb的nodejs驱动;</p>
<p>  GitHub地址:https://github.com/mongodb/node-mongodb-native</p>
<h1 id="mongodb_install" class="wilson_h1">MongoDB安装(windows)</h1>
<p>  官方安装说明: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/</p>
<p>  按照官方说明在win7 64位环境下配置还是遇到了问题,我还是把我安装配置的过程写一下</p>
<p>  </p>
<p>  <strong>下载MongoDB并安装</strong></p>
<p>  下载地址:http://www.mongodb.org/downloads</p>
<p><strong>  创建数据库和日志存放目录</strong></p>
<p>  在C盘根目录下新建“M_DB”和“M_LOG”两个文件夹,分别存放数据库文件和日志文件</p>
<p><strong>  创建一个config文件</strong></p>
<p>  打开目录“C:\Program Files\MongoDB 2.6 Standard\bin”,并在此目录下新建一个mongo.config文件,文件内容如下</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">##数据库目录
dbpath</span>=<span style="color: rgba(0, 0, 0, 1)">C:\M_DB

##日志输出文件
logpath</span>=C:\M_LOG\mongodb.log</pre>
</div>
<p><strong>  添加环境变量</strong></p>
<p>  在环境变量PATH中加入“C:\Program Files\MongoDB 2.6 Standard\bin“</p>
<p><strong>  以Windows服务器运行MongoDB</strong></p>
<p>  以管理员方式打开CMD窗口,运行如下命令安装MongoDB服务,可以在 “控制面板\所有控制面板项\管理工具\服务”找到名为“MongoDB”的服务右键启动</p>
<div class="cnblogs_code">
<pre>mongod --config <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">C:\Program Files\MongoDB 2.6 Standard\bin\mongo.config</span><span style="color: rgba(128, 0, 0, 1)">"</span> --<span style="color: rgba(0, 0, 255, 1)">install</span></pre>
</div>
<p><strong>  启动服务</strong></p>
<p>  在CMD窗口中运行如下命令,也可以在可以在 “控制面板\所有控制面板项\管理工具\服务”</p>
<div class="cnblogs_code">
<pre>net start mongodb</pre>
</div>
<p><strong>  测试连接</strong></p>
<p>  在CMD中运行如下命令,查看结果</p>
<div class="cnblogs_code">
<pre>mongo</pre>
</div>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_1.png" alt="" width="602" height="144"></p>
<p><strong>  安装成功!</strong></p>
<p>&nbsp;</p>
<p class="wilson_tip">  最后两步非必需;MongoDB默认端口是27017,可以修改!</p>
<p>&nbsp;</p>
<p>  对于“C:\Program Files\MongoDB 2.6 Standard\bin”目录下的exe程序,做个简单的说明,可能更利于了解可以做些什么操作,基础学习关注mongod.exe和mongo.exe即可</p>
<p>  mongo.exe:客户端,支持js语法</p>
<p>  mongod.exe:服务端</p>
<p>  mongodump.exe:备份工具</p>
<p>  mongorestore.exe:恢复工具</p>
<p>  mongoexport.exe:导出工具</p>
<p>  mongoimport.exe:导入工具</p>
<p>  mongostat.exe:实时性能监控工具</p>
<p>  mongotop.exe:跟踪MongDB实例读写时间工具</p>
<p>&nbsp;</p>
<p>  更多详细解释或操作可以查看:http://docs.mongodb.org/manual/reference/program/</p>
<h1 id="mongodb_learn" class="wilson_h1">MongoDB基本语法和操作入门(mongo.exe客户端操作)</h1>
<p>  MongoDB已经安装好,下面先对MongoDB进行一个简单的入门,再用node-mongodb-native去操作MongoDB</p>
<p>  <strong>库操作</strong></p>
<p>  新建数据库:第一步:use 新建数据库名;第二步:进行此库相关的操作;如果不进行第二步,该数据库不会被创建</p>
<p>  查看数据库:show dbs;</p>
<p>  新建表:db.createCollection('要新建的表名');</p>
<p>  查看当前数据库下表: show collections;</p>
<p>  删除当前数据库指定表:db.表名.drop();</p>
<p>  删除当前数据库:db.dropDatabase();</p>
<p>&nbsp;</p>
<p>  示例操作如下图:</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_2.png" alt="" width="602" height="339"></p>
<p class="wilson_tip">  1.默认为存在“admin”和“local”两个数据库;admin数据库是存放管理员信息的数据库,认证会用到;local是存放replication相关的数据;这两处本篇都没有涉及到;</p>
<p class="wilson_tip">  2.find();是个查询操作,后面会讲到,上面用到主要是为了演示use不存在的库后,进行相关操作会创建出这个库;</p>
<p class="wilson_tip">  3.MongoDB没有像MySQL或MSSQL等数据库这么严格的规定,不是非得要先建库、建表、建各种字段,以后的操作中慢慢的会体会到^_^!</p>
<p>  </p>
<p>  <strong>插入</strong></p>
<p>  <strong>方法一:</strong>db.表名.insert(数据);</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_3.png" alt="" width="600" height="84"></p>
<p class="wilson_tip">  1.从上图操作可以看出,没有去创建“tb1”表,其实通过插入操作也会自动创建</p>
<p class="wilson_tip">  2._id,是mongodb自已生成的,每行数据都会存在,默认是ObjectId,可以在插入数据时插入这个键的值(支持mongodb支持的所有数据类型)  </p>
<p>  <strong>方法二:</strong>db.表名.save(数据);</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_4.png" alt="" width="602" height="72">&nbsp;  </p>
<p class="wilson_tip">  1.从上图操作可以看出,save也可达到insert一样的插入效果</p>
<p class="wilson_tip">  2._id可以自已插入</p>
<p class="wilson_tip">  3.一个表中不一定要字段都相同</p>
<p>&nbsp;</p>
<p><span style="color: rgba(0, 0, 0, 1)">  那它们有什么区别?</span></p>
<p><span style="color: rgba(255, 0, 0, 1)">  <span style="color: rgba(0, 0, 0, 1)"><img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_5.png" alt="" width="600" height="222"></span></span></p>
<p class="wilson_tip">  从图中操作就可以看出,虽然insert和save方法都可以插入数据,当默认的“_id”值已存在时,调用insert方法插入会报错;而save方法不会,会更新相同的_id所在行数据的信息</p>
<p>&nbsp;</p>
<p>  <strong>查询</strong><strong>  </strong></p>
<p>  查询表中所有数据:db.表名.find();</p>
<p>  按条件查询(支持多条件):db.表名.find(条件);&nbsp;</p>
<p>  查询第一条(支持条件):db.表名.findOne(条件);</p>
<p>  限制数量:db.表名.find().limit(数量);</p>
<p>  跳过指定数量:db.表名.find().skip(数量);</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_6.png" alt="" width="601" height="457"></p>
<p class="wilson_tip">  从上图中可以看出具体用法,批量插入默认数据我用了一个javascript语法循环;</p>
<p>  </p>
<p>  比较查询</p>
<p>  大于:$gt</p>
<p>  小于:$lt</p>
<p>  大于等于:$gte</p>
<p>  小于等于:$lte</p>
<p>  非等于:$ne</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_7.png" alt="" width="600" height="290"></p>
<p>  上面看到了AND的关系,或者的关系应该怎么用?</p>
<p>  或者:$or</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_8.png" alt="" width="600" height="53"></p>
<p>  </p>
<div>  in和not in查询(包含、不包含)</div>
<div>  $in</div>
<div>  $nin</div>
<div>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_9.png" alt="" width="603" height="159">&nbsp;</div>
<p>&nbsp;</p>
<p>  查询数量:db.表名.find().count();</p>
<p>  排序:db.表名.find().sort({"字段名":1});&nbsp;</p>
<p>     1:表示升序 &nbsp;-1:表示降序</p>
<p>  指定字段返回:&nbsp;db.表名.find({},{"字段名":0});  </p>
<p>     1:返回 &nbsp;0:不返回</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_10.png" alt="" width="604" height="204"></p>
<p>  </p>
<p class="wilson_tip">  查询就讲到这里了,感觉查询示例一下讲不完,还有些高级查询,大家自行去了解一下吧^_^!</p>
<p>  </p>
<p>  <strong>修改</strong></p>
<p>  前面save在_id字段已存在是就是修改操作,按指定条件修改语法如下</p>
<p>  db.表名.update({"条件字段名":"字段值"},{$set:{"要修改的字段名":"修改后的字段值"}});</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_11.png" alt="" width="603" height="84"></p>
<p>&nbsp;</p>
<p>  <strong>删除</strong></p>
<p>  db.表名.remove(条件);</p>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_12.png" alt="" width="600" height="259"></p>
<p>&nbsp;</p>
<p>  <strong>存储过程</strong></p>
<p>&nbsp;  创建存储过程:</p>
<div class="cnblogs_code">
<pre>db.system.js.<span style="color: rgba(0, 0, 255, 1)">save</span><span style="color: rgba(0, 0, 0, 1)">({_id:"存储过程ID",
value:</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(参数){
      </span><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)"> 逻辑主体; </span>
      <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> 返回;
}});                </span></pre>
</div>
<p>  调用存储过程</p>
<div class="cnblogs_code">
<pre>db.eval("存储过程ID()");</pre>
</div>
<p>  <img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_13.png" alt="" width="600" height="122"></p>
<p class="wilson_tip">  所有存储过程都存放在db.system.js中</p>
<p>&nbsp;</p>
<p class="wilson_tip">  MongoDB基本操作就讲这么多了,基本够用,深入学习大家自已去看看API^_^!</p>
<p>&nbsp;</p>
<h1 id="node_mongodb" class="wilson_h1">nodejs操作MongoDB</h1>
<p>  先用npm安装mongodb</p>
<div class="cnblogs_code">
<pre>npm <span style="color: rgba(0, 0, 255, 1)">install</span> mongodb</pre>
</div>
<p>  安装成功后,继续在上面操作创建的库和表中操作</p>
<p>  </p>
<p> <strong> 插入</strong></p>
<blockquote>
<p><img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_14.png" alt="" width="704" height="744"></p>
</blockquote>
<div class="cnblogs_code"><img id="code_img_closed_49d7816c-e6ed-40f5-be0c-0c515ee574f3" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_49d7816c-e6ed-40f5-be0c-0c515ee574f3" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_49d7816c-e6ed-40f5-be0c-0c515ee574f3" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> MongoClient = require('mongodb'<span style="color: rgba(0, 0, 0, 1)">).MongoClient;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'<span style="color: rgba(0, 0, 0, 1)">;   

</span><span style="color: rgba(0, 0, 255, 1)">var</span> insertData = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(db, callback) {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">连接到表</span>
    <span style="color: rgba(0, 0, 255, 1)">var</span> collection = db.collection('tb2'<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">插入数据</span>
    <span style="color: rgba(0, 0, 255, 1)">var</span> data = [{"name":'wilson001',"age":21},{"name":'wilson002',"age":22<span style="color: rgba(0, 0, 0, 1)">}];
    collection.insert(data, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, result) {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(err)
      {
            console.log(</span>'Error:'+<span style="color: rgba(0, 0, 0, 1)"> err);
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
      }   
      callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, db) {
    console.log(</span>"连接成功!"<span style="color: rgba(0, 0, 0, 1)">);
    insertData(db, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(result) {
      console.log(result);
      db.close();
    });
});</span></pre>
</div>
<span class="cnblogs_code_collapse">示例源码</span></div>
<p>  <strong>查询</strong></p>
<blockquote>
<p>&nbsp;<img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_15.png" alt="" width="700" height="714"></p>
</blockquote>
<div class="cnblogs_code"><img id="code_img_closed_d5ae8241-ea3a-41a0-a300-f68fe8f3d67e" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_d5ae8241-ea3a-41a0-a300-f68fe8f3d67e" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_d5ae8241-ea3a-41a0-a300-f68fe8f3d67e" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> MongoClient = require('mongodb'<span style="color: rgba(0, 0, 0, 1)">).MongoClient;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">var</span> selectData = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(db, callback) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">连接到表</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> collection = db.collection('tb2'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询数据</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> whereStr = {"name":'wilson001'<span style="color: rgba(0, 0, 0, 1)">};
collection.find(whereStr).toArray(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, result) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(err)
    {
      console.log(</span>'Error:'+<span style="color: rgba(0, 0, 0, 1)"> err);
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
    }   
    callback(result);
});
}

MongoClient.connect(DB_CONN_STR, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, db) {
console.log(</span>"连接成功!"<span style="color: rgba(0, 0, 0, 1)">);
selectData(db, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(result) {
    console.log(result);
    db.close();
});
});</span></pre>
</div>
<span class="cnblogs_code_collapse">示例源码</span></div>
<p>  <strong>修改</strong></p>
<blockquote>
<p><img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_16.png" alt="" width="703" height="729"></p>
</blockquote>
<div class="cnblogs_code"><img id="code_img_closed_2f40062c-5c1d-4609-b6ba-a4c428be0f33" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_2f40062c-5c1d-4609-b6ba-a4c428be0f33" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_2f40062c-5c1d-4609-b6ba-a4c428be0f33" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> MongoClient = require('mongodb'<span style="color: rgba(0, 0, 0, 1)">).MongoClient;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'<span style="color: rgba(0, 0, 0, 1)">;   

</span><span style="color: rgba(0, 0, 255, 1)">var</span> updateData = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(db, callback) {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">连接到表</span>
    <span style="color: rgba(0, 0, 255, 1)">var</span> collection = db.collection('tb2'<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">更新数据</span>
    <span style="color: rgba(0, 0, 255, 1)">var</span> whereStr = {"name":'wilson001'<span style="color: rgba(0, 0, 0, 1)">};
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> updateStr = {$set: { "age" : 100<span style="color: rgba(0, 0, 0, 1)"> }};
    collection.update(whereStr,updateStr, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, result) {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(err)
      {
            console.log(</span>'Error:'+<span style="color: rgba(0, 0, 0, 1)"> err);
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
      }   
      callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, db) {
    console.log(</span>"连接成功!"<span style="color: rgba(0, 0, 0, 1)">);
    updateData(db, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(result) {
      console.log(result);
      db.close();
    });
});</span></pre>
</div>
<span class="cnblogs_code_collapse">示例源码</span></div>
<p>  <strong>删除</strong></p>
<blockquote>
<p><img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_17.png" alt="" width="701" height="729"></p>
</blockquote>
<div class="cnblogs_code"><img id="code_img_closed_6df485b8-4810-4207-8489-29f27e68ccd6" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_6df485b8-4810-4207-8489-29f27e68ccd6" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_6df485b8-4810-4207-8489-29f27e68ccd6" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> MongoClient = require('mongodb'<span style="color: rgba(0, 0, 0, 1)">).MongoClient;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">var</span> delData = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(db, callback) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">连接到表</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> collection = db.collection('tb2'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">删除数据</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> whereStr = {"name":'wilson001'<span style="color: rgba(0, 0, 0, 1)">};
collection.remove(whereStr, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, result) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(err)
    {
      console.log(</span>'Error:'+<span style="color: rgba(0, 0, 0, 1)"> err);
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
    }   
    callback(result);
});
}

MongoClient.connect(DB_CONN_STR, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, db) {
console.log(</span>"连接成功!"<span style="color: rgba(0, 0, 0, 1)">);
delData(db, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(result) {
    console.log(result);
    db.close();
});
});</span></pre>
</div>
<span class="cnblogs_code_collapse">示例源码</span></div>
<p>  <strong>调用存储过程</strong></p>
<blockquote>
<p><img src="https://images.cnblogs.com/cnblogs_com/zhongweiv/659351/o_18.png" alt="" width="700" height="655"></p>
</blockquote>
<div class="cnblogs_code"><img id="code_img_closed_d5348ccc-901c-4476-9aef-6f30d24897f6" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_d5348ccc-901c-4476-9aef-6f30d24897f6" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_d5348ccc-901c-4476-9aef-6f30d24897f6" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> MongoClient = require('mongodb'<span style="color: rgba(0, 0, 0, 1)">).MongoClient;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'<span style="color: rgba(0, 0, 0, 1)">;   

</span><span style="color: rgba(0, 0, 255, 1)">var</span> invokeProcData = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(db, callback) {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">存储过程调用</span>
    db.eval('get_tb2_count()', <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, result) {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(err)
      {
            console.log(</span>'Error:'+<span style="color: rgba(0, 0, 0, 1)"> err);
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
      }            
      callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(err, db) {
    console.log(</span>"连接成功!"<span style="color: rgba(0, 0, 0, 1)">);
    invokeProcData(db, </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(result) {
      console.log(result);
      db.close();
    });
});</span></pre>
</div>
<span class="cnblogs_code_collapse">示例源码</span></div>
<p>&nbsp;</p>
<p class="wilson_tip">  到此CRUD操作就完成,通过回调函数的result参数进行判断都可以进行业务逻辑的进一步组合!</p>
<h1 id="node_aferwords" class="wilson_h1">写在之后...</h1>
<p>  本篇针对node-mongodb-native操作MongoDB没有做更深的讲解,原因是针对它的进行再次封装的东西很多,且更利于编程实现,比如:mongoose、mongoskin、mongolian等等,应用性不错;</p>
<p>  mongoose的可能用的比较多...</p>
<p>  本文中很多地方我都还是习惯的用表、行等术语去描述,其实对NoSQL来说并不对,只是有助于习惯了关系型数据库的开发人员来解;</p>
<p>  文章中“表”本应该描述为“collection(集合)”;“行”应该描述为“文档(document)”,一个database中可以有多个collection,一个collection中又可以有多个document</p>
<p>  文章中并没有涉及认证的部分,大家自行去补一下,非常简单,我文中也挺到了两个默认数据库中的“admin”数据库</p>
<p>  用CMD中使用mongo.exe操作时,插入中文遇一了问题,原因是MongoDB默认编辑是utf-8,而CMD是GBK,所以在CMD窗口中执行这个命令修改编辑即可:chcp&nbsp;65001</p>
<p>  注意mongodb严格区分大小写,比如查询&nbsp;db.tb2.find({"name":"wilson0"})和&nbsp;db.tb2.find({"Name":"wilson0"}) 并不是用的同一字段做的条件;</p>
<p>&nbsp;</p>
<p>  主要参考资料:</p>
<p>  http://docs.mongodb.org/manual/</p>
<p>  https://github.com/mongodb/node-mongodb-native</p>
<p>  MongoDB权威指南</p>
</div>

</div>
<div id="MySignature" role="contentinfo">
    <div style="color:#399AB2;">
<p style="line-height: 20px; background: #CCC no-repeat 2% 50%; font-size: 12px; border: #e0e0e0 1px dashed; padding: 10px;color:#399AB2;">
作 &nbsp; 者:&nbsp;&nbsp;
Porschev[钟慰]
<br/>
出 &nbsp; 处:&nbsp;&nbsp;
http://www.cnblogs.com/zhongweiv/
<br/>
微 &nbsp; 博: &nbsp;&nbsp;&nbsp;
http://weibo.com/porschev
<br/>
欢迎任何形式的转载,但请务必注明原文详细链接
</p>
</div><br><br>
来源:https://www.cnblogs.com/zhongweiv/p/node_mongodb.html
頁: [1]
查看完整版本: Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门