之前我们学习了Mongodb的shell命令,现在我们在一个小的node项目中使用mongodb,首先初始化一个express项目$npminstallexpress-generator-g//global安装步骤2$expresstestmongodb//初始化项目Step3$cdtestmongodb$cnpminstallStep4//启动$npmstart并在浏览器中打开http://localhost:3000/URL以查看此应用。更改目录结构|箱子|模型-db.js|配置-config.js|观点|公开|路线-index.js|//config.jsvarbaseUrl="mongodb://localhost:27017";vardbbase="/mongodb_demo";//这是我的数据库名称module.exports={"dburl":baseUrl+dbbase};//db.js/***数据库包**/varMongodbClient=require('mongodb').MongoClientvarassert=require('assert')varconfig=require('../config/config.js')/***连接数据库*/function__connectDB(callback){MongodbClient.connect(config.dburl,function(err,db){callback(err,db)})}/***插入一条数据*@param{*}collectionNamecollectionName*@param{*}Datajson写入的json数据*@param{*}callback回调函数*/function__insertOne(collectionName,Datajson,callback){__connectDB(function(err,db){varcollection=db.collection(collectionName);collection.insertOne(Datajson,function(err,result){callback(err,result);//通过回调函数上传数据db.close();})})}/***查找数据*@param{*}collectionName集合名*@param{*}Datajson查询条件*@param{*}callback回调函数*/function__find(collectionName,JsonObj,callback){varresult=[];if(arguments.length!=3){callback("find函数必须传入三个参数",null)return}__connectDB(function(err,db){varcursor=db.collection(collectionName).find(JsonObj);if(!err){cursor.each(function(err,doc){assert.equal(err,null)//使用node的assert模块判断是否有错误//如果有错误,则下面的if(doc!=null){result.push(doc)}else{callback(null,result)db.close();}})}})}/****删除所有符合条件的数据)*@param{*}collectionName集合名*@param{*}json查询json数据*@param{*}callback回调函数*/function__DeleteMany(collectionName,json,callback){__connectDB(function(err,db){assert.equal(err,null)//删除db.collection(collectionName).deleteMany(json,function(err,results){assert.equal(err,null)回调(err,results);数据库关闭();//关闭数据库});});}/***修改数据*@param{*}collectionName集合名*@param{*}json1查询对象*@param{*}json2修改*@param{*}callback回调函数*/function__updateMany(collectionName,json1,json2,callback){__connectDB(function(err,db){assert.equal(err,null)db.collection(collectionName).updateMany(json1,json2,function(err,results){assert.equal(err,null)callback(err,results)db.close()})})}/***获取总数*@param{*}collectionName集合名*@param{*}json查询条件*@param{*}callback回调函数*/function__getCount(collectionName,json,callback){__connectDB(function(err,db){db.collection(collectionName).count(json).then(function(count){callback(count)db.close();})})}/***分页查找数据*@param{*}collectionName集合名称*@param{*}JsonObj查询条件*@param{*}C[可选]传入的参数,每页的编号,以及显示的页数*@param{*}C回调*/function__findByPage(collectionName,JsonObj,C,D){varresult=[];//结果数组if(arguments.length==3){//则参数C为回调,参数D不传varcallback=C;var跳过编号=0;//数量限制varlimit=0;}elseif(arguments.length==4){varcallback=D;可变参数=C;//应该省略的项目数varskipnumber=args.pageamount*args.page||0;//数量限制varlimit=args.pageamount||0;//排序方法varsort=args.sort||{};}else{thrownewError("查找函数的参数个数必须为3或4个。");return;}//连接数据库,查找所有__connectDB(function(err,db){varcursor=db.collection(collectionName).find(JsonObj).skip(skipnumber).limit(limit).sort(sort);cursor.each(function(err,doc){if(err){callback(err,null);db.close();//关闭数据库return;}if(doc!=null){result.push(doc);//放入结果数组}else{//遍历结束,不再有文档callback(null,result);db.close();//关闭数据库}});});}module.exports={__connectDB,__insertOne,__find,__DeleteMany,__updateMany,__getCount,__findByPage}//db.js文件是DAO层对数据库操作的封装//app.jsvarcreateError=require('http-errors');varexpress=require('express');varpath=require('path');varcookieParser=require('cookie-parser');varlogger=require('morgan');varindexRouter=require('./routes/index');varusersRouter=require('./routes/users');//修改【1】global.db=require('./modle/db.js')//引入数据库封装好的DAO层方法varapp=express();//viewenginesetupapp.set('views',path.join(__dirname,'views'));app.set('viewengine','jade');app.use(logger('dev'));app.use(express.json());app.use(express.urlencoded({extended:false}));app.use(cookieParser());app.use(express.static(path.join(__dirname,'public')));//修改【2】这里配置我们的路径由app.use('/',indexRouter)app.use('/users',usersRouter)app.use('/testconnect',indexRouter)app.use('/testdeletemany',indexRouter)app.use('/testupdatemany',indexRouter)app.use('/count',indexRouter)app.use('/testfingbypage',indexRouter)//捕获404并转发到错误处理程序app.use(function(req,res,next){next(createError(404));});//errorhandlerapp.use(function(err,req,res,next){//设置局部变量,只提供开发中的错误res.locals.message=err.message;res.locals.error=req.app.get('env')==='development'?err:{};//重新渲染错误页面s.status(err.status||500);res.render('error');});module.exports=app;//index.js//这里用来配置路由操作varexpress=require('express');varrouter=express.Router();/*获取主页。*/router.get('/',function(req,res,next){res.render('index',{title:'Express'});});//测试数据库连接router.get('/testconnect',function(req,res){global.db.__connectDB(function(err,db){if(err){console.log(err)return}console.log(db)res.render('index',{title:'连接数据库成功'})})})//测试插入数据router.get('/testinsert',function(req,res){global.db.__insertOne('student',{"name":"zjj","age":33,"interests":['play'],"sex":"male"},function(err,result){if(!err){console.log(result)res.render('index',{title:'一条数据插入成功'})}else{console.log(err)}})})//查找数据router.get('/testfind',function(req,res){global.db.__find('student',{age:{$lt:30}},function(err,result){if(!err){console.log(result)res.render('index',{title:'查询成功'})}else{console.log(err)}})})//删除数据(删除所有符合条件数据)router.get('/testdeletemany',function(req,res){global.db.__DeleteMany('student',{"age":{$gte:19}},function(err,result){if(!err){console.log(result)res.render('index',{title:'删除成功'})}else{console.log(err)}})})//修改数据(满足条件All数据会被修改)router.get('/testupdatemany',function(req,res){global.db.__updateMany('student',{"name":"zjj"},{$set:{name:"cnm"}},function(err,result){if(!err){console.log(result)res.render('index',{title:'修改成功'})}})})//总统计路由器.get('/count',function(req,res){global.db.__getCount('student',{},function(count){console.log(count)res.render('index',{title:`一共${count}条数据`})})})//页面显示//page为页面数,从0开始router.get('/testfingbypage',function(req,res){global.db.__findByPage('student',{},{“pageamount”:6,“page”:0},function(err,result){if(err){throwerr;}res.send(result);console.log(result.length);})})module.exports=router;启动一次$npmstartopenlocalhost:3000测试路由,然后看看自己的数据库有没有进行相关操作?感谢您的支持!!
