node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装
第七章 建议学习时间4小时 课程共10章
学习方式:详细阅读,并手动实现相关代码
学习目标:此教程将教会大家 安装Node、搭建服务器、express、mysql、mongodb、编写后台业务逻辑、编写接口,最后完成一个完整的项目后台,预计共10天课程。
node.js操作mangodb
创建一个用于放置今天文件的文件夹,npm init初始化一下,并创建demo1.js用于写node代码

使用
npm install mongodb@2.2.33
,将mongodb控制模块安装到本地 (由于后来的mongodb版本操作方法有改变,这里使用 @2.2.33来安装这个版本,下图是后来换的,所以和前面命令行的截图风格不同)

在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条 )

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

查找: 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();
})
});
运行,成功查找到上一步插入的数据

删除 使用 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();
});
});
执行,成功的结果

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

修改: 使用 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();
});
});
运行成功的结果

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

到这里,就实现了通过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();
});
};
使用这个封装
具体的封装的使用方法,我们将在下一节课项目中去介绍
今天就讲到这里,明天我们讲解:项目的创建,后台数据请求接口的编写
关注公众号,博客更新即可收到推送

node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装的更多相关文章
- node.js零基础详细教程(7.5):mongo可视化工具webstorm插件、nodejs自动重启模块Node Supervisor(修改nodejs后不用再手动命令行启动服务了)
第七章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- node.js零基础详细教程(5):express 、 路由
第五章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- node.js零基础详细教程(6):mongodb数据库操作
第六章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- node.js零基础详细教程(6):mongodb数据库操作 以及导入导出
第六章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- node.js零基础详细教程(2):模块化、fs文件操作模块、http创建服务模块
第二章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑 ...
- node.js零基础详细教程(3):npm包管理、git github的使用
第三章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑 ...
- node.js零基础详细教程(4):node.js事件机制、node异步IO操作
第四章 建议学习时间3小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- node.js零基础详细教程(1):安装+基础概念
第一章 建议学习时间2小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- nodejs零基础详细教程2:模块化、fs文件操作模块、http创建服务模块
第二章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑 ...
随机推荐
- 移动端H5开发 (滑动事件)
最近一直在做手机App H5的开发,在开发过程中,经常会遇到很多滑动事件,写个demo,分享自己的一些写法.(如写的不好,轻喷!) 直接贴代码 html css代码 <!DOCTYPE html ...
- python特征提取——pyAudioAnalysis工具包
作者:桂. 时间:2017-05-04 18:31:09 链接:http://www.cnblogs.com/xingshansi/p/6806637.html 前言 语音识别等应用离不开音频特征的 ...
- 解决 jQuery UI datepicker z-index默认为1 的问题
最近碰到页面日期选择控件被页头挡住的问题,我们这个客户的电脑是宽屏的,上下窄,屏幕又小,导致他点击日期选择控件时,无法选择到月份.如图: 分析造成这个问题的原因: 我们页头部分的z-index设置为1 ...
- Java面试题之最扯淡的String
public class ThreadException { public static void main(String[] args) { 没加final的代码 String hello = &q ...
- 【Netty】Netty传输
一.前言 在简单学习了Netty中的组件后,接着学习Netty中数据的传输细节. 二.传输 2.1 传输示例 Netty中的数据传输都是使用的字节类型,下面通过一个实例进行说明,该实例中服务器接受请求 ...
- spring-线程池(1)
多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了.spring封装了java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说 ...
- Java字节码—ASM
前言 ASM 是什么 官方介绍:ASM is an all purpose Java bytecode manipulation and analysis framework. It can be u ...
- Swift 入门之简单语法(三)
集合 数组 数组使用 [] 定义,这一点与 OC 相同 //: [Int] let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 遍历 for num in nu ...
- 《算法4》2.1 - 插入排序算法(Insertion Sort), Python实现
排序算法列表电梯: 选择排序算法:详见 Selection Sort 插入排序算法(Insertion Sort):非常适用于小数组和部分排序好的数组,是应用比较多的算法.详见本文 插入排序算法的语言 ...
- 使用wamp扩展php时出现服务未启动的解决方法
今天在使用wamp扩展php的插件时,出现了如下图所示的错误提示 网上查了查,都说是端口原因,修改Apache的 80端口,但是并没有解决问题. 最后我终于找到了解决方法,步骤很简单,如下: 首先,在 ...