设为首页 收藏本站
查看: 1599|回复: 0

[经验分享] node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装

[复制链接]

尚未签到

发表于 2017-12-15 06:56:14 | 显示全部楼层 |阅读模式
  第七章 建议学习时间4小时  课程共10章
  学习方式:详细阅读,并手动实现相关代码
  学习目标:此教程将教会大家 安装Node、搭建服务器、express、mysql、mongodb、编写后台业务逻辑、编写接口,最后完成一个完整的项目后台,预计共10天课程。
  node.js操作mangodb
  创建一个用于放置今天文件的文件夹,npm init初始化一下,并创建demo1.js用于写node代码
DSC0000.png

  使用 npm install mongodb,将mongodb控制模块安装到本地
DSC0001.png

  在demo1.js中写入下面操作代码
  

var mongo = require("mongodb"); //引入mongodb模块  
var assert = require("assert"); //引入断言模块
  

  
var MongoClient = mongo.MongoClient;  //开启服务
  

  
var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
  

  
MongoClient.connect(Urls,function(err,db){  //获取连接
  
     assert.equal(null,err);  //使用断言模块代替以前的 if判断
  
     
  

  
     //插入数据
  
     db.collection("t1").insert({"name":"xiaoming"},function(err,result){ //连接到数据库上面,并使用参数传入集合
  
         assert.equal(null,err);
  
         console.log(result);
  
         db.close();
  
     });
  

  

  
});
  

  代码解释:
  1行2行引入了需要的两个模块,4行开启服务器,
  6行是url的地址,一般默认安装的时候地址和端口是 “mongodb://localhost:27017”,后面的demo2是我的mongodb的数据库的名字(你替换成你自己创建的数据库即可)
  8行是根据上面声明的url去和数据库建立连接,connect方法有两个参数,1、连接的数据库地址,2、回调函数,回调函数两个参数表示发送错误,以及正确的情况下返回数据库的链接,我们就可以在此链接上进行操作了。
  注意:这里的链接是初学者常报错的地方,如果报错,去确认地址和数据库名字是否填错,确保自己的数据库中有对应的库名字。
  重点讲解下 13行,这里是node插入数据库的操作, db.collection("t1")表示获取需要操作的表,  insert是插入方法,方法接收两个参数,1、插入的内容,2、回调函数,回调函数两个参数表示发送错误,以及正确的情况下返回的结果。
  15行打印出错结果,16行关闭和数据库的链接(如果一直连着,浏览器会崩溃)
  执行demo1.js。成功即可得到下图结果   (  划线处的 n表示成功了1条 )
DSC0002.png

  查询数据库,可以看到新添加的数据
DSC0003.png

  查找:  find方法,传入查找筛选的json(如果不传,就查询全部),后面的toArray是将数据作处理之后变成我们可以识别的数组格式
  后面的操作,除了中部的数据操作部分代码不同,其余代码都是相同的。
  

var mongo = require("mongodb"); //引入mongodb模块  
var assert = require("assert"); //引入断言模块
  

  
var MongoClient = mongo.MongoClient;  //开启服务
  

  
var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
  

  
MongoClient.connect(Urls,function(err,db){  //获取连接
  
     assert.equal(null,err);  //使用断言模块代替以前的 if判断
  
     
  

  
     //查找数据
  
     db.collection("t1").find({"name":"xiaoming"}).toArray(function(err,result){
  
         assert.equal(null,err);
  
         console.log(result);
  
         db.close();
  
     })
  

  

  
});
  

  运行,成功查找到上一步插入的数据
DSC0004.png

  删除    使用 deleteOne删除一条数据,两个参数 1、删除的查找json 2、回调函数
  

var mongo = require("mongodb"); //引入mongodb模块  
var assert = require("assert"); //引入断言模块
  

  
var MongoClient = mongo.MongoClient;  //开启服务
  

  
var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
  

  
MongoClient.connect(Urls,function(err,db){  //获取连接
  
     assert.equal(null,err);  //使用断言模块代替以前的 if判断
  
     
  
     //删除数据
  
     db.collection("t1").deleteOne({"name":"xiaoming"},function(err,result){ //连接到数据库上面,并使用参数传入集合
  
         assert.equal(null,err);
  
         console.log(result);
  
         db.close();
  
     });
  

  
});
  

  执行,成功的结果
DSC0005.png

  查询数据库发现 xiaoming那条数据被删除了
DSC0006.png

  修改: 使用 update方法,包括三个参数,1、查询条件,2、修改的字段以及修改器,3、回调函数
  

var mongo = require("mongodb"); //引入mongodb模块  
var assert = require("assert"); //引入断言模块
  

  
var MongoClient = mongo.MongoClient;  //开启服务
  

  
var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
  

  
MongoClient.connect(Urls,function(err,db){  //获取连接
  assert.equal(null,err);  //使用断言模块代替以前的 if判断
  //修改数据
  db.collection("t1").update({"name":"zhangsan1"},{$set:{"name":"xiaoming"}},function(err,result){ //连接到数据库上面,并使用参数传入集合
  assert.equal(null,err);
  console.log(result);
  db.close();
  });
  

  
});
  

  运行成功的结果
DSC0007.png

  查询数据库发现,原来的zhangsan1被修改成了xiaoming
DSC0008.png

  到这里,就实现了通过nodejs增删改查mongodb数据库
  封装增删改查的代码
  创建一个封装js的文件  dbhandler.js  ,将下列代码复制进去(封装的代码文字解说太困难,这里就不解释了,只给大家介绍如何使用,以后可能会出视频教程,到时候再详细解释这个封装)
  --   注:第6行的url后面的数据库 替换成自己要操作的数据库,其他都不用变
  

var mongo=require("mongodb");//@2.2.11  
var MongoClient = mongo.MongoClient;
  
var assert = require('assert');
  
var host="localhost";
  
var port="27017";
  
var Urls = 'mongodb://localhost:27017/demo2';
  

  

  
//add一条数据
  
var add = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  collection.insertMany([selector],function(err,result){
  assert.equal(err,null);
  fn(result);
  db.close();
  });
  
}
  
//delete
  
var deletes = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  collection.deleteOne(selector,function(err,result){
  try{assert.equal(err,null)}catch(e){
  console.log(e);
  }
  fn(result);
  db.close();
  });
  

  
};
  
//find
  
var find = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  

  collection.find(selector).toArray(function(err,docs){
  

  try{
  assert.equal(err,null);
  }catch(e){
  console.log(e);
  docs = [];
  }
  

  fn(docs);
  db.close();
  });
  

  
}
  
//(权限控制) -- 暂时没有用
  
MongoClient.connect(Urls, function(err, db) {
  find(db,"powers",null,function(d){
  console.log("123s");
  console.log(d.length);
  });
  
});
  

  
//update
  
var updates = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  console.log(selector);
  collection.updateOne(selector[0],selector[1],function(err,result){
  assert.equal(err,null);
  assert.equal(1,result.result.n);
  fn(result);
  db.close();
  });
  

  
}
  

  
//方法都赋值到操作对象上,便于调用
  
var methodType = {
  login:find,
  show:find,
  add:add,
  getpower:find,
  update:updates,
  delete:deletes,
  updatepass:updates,
  adduser:add,
  usershow:find,
  getcategory:find,
  getcourse:find,
  find:find,
  state:find,
  top:find,
  AddDirectory:find,
  updateDirectory:updates,
  deleteDirectory:deletes,
  showlist:find,
  showdir:find
  
};
  
//主逻辑
  
module.exports = function(req,res,collections,selector,fn){
  MongoClient.connect(Urls, function(err, db) {
  assert.equal(null, err);
  console.log("Connected correctly to server");
  methodType[req.query.action](db,collections,selector,fn);
  db.close();
  });
  

  
};
  

  使用这个封装
  具体的封装的使用方法,我们将在下一节课项目中去介绍
  今天就讲到这里,明天我们讲解:项目的创建,后台数据请求接口的编写
  关注公众号,博客更新即可收到推送
DSC0009.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424232-1-1.html 上篇帖子: C# MongoDB 下篇帖子: 【数据库】Mean web开发 03-MongoDB客户端管理工具NoSQL Manager for MongoDB的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表