一、node.js对mongodb的基本操作1、启动数据库首先,我们需要先启动数据库,并创建一个存放数据库文件的文件夹。如D:\mongo,然后在cmd中输入命令->mongod--dbpathD:\mongo启动数据库。如下图所示:接下来,让cmd控制面板保持这个状态,确保数据库已经上电。2、连接数据库在node.js中操作mongodb数据库,需要引入第三方模块包mongodb。所以我们先在项目文件夹下输入命令->npminstallmongodb,完成下载包。接下来,使用constMongoClient=require('mongodb').MongoClient;完成包介绍。示例代码如下:constMongoClient=require('mongodb').MongoClient;vardburl="mongodb://127.0.0.1:27017/test";MongoClient.connect(dburl,(err,db)=>{if(err){console.log('数据库连接失败!');return;};console.log(db);});我们先在数据库地址上定义一个dburl变量指定本机端口号27017(mongodb默认端口号)。test是自定义数据库的名称。如果数据库不存在,将自动创建数据库。接下来,完成与本机测试数据库的连接。这是一个异步函数。当连接完成后,触发其回调函数执行。参数db指的是数据库本身。接下来所有对数据库的增删改查都写在连接的回调函数中。3.插入数据数据插入操作是指将文档对象插入到数据库的指定集合中。同样在完成数据库连接的回调函数中对db对象进行操作。示例代码如下:constMongoClient=require('mongodb').MongoClient;vardburl="mongodb://127.0.0.1:27017/test";MongoClient.connect(dburl,(err,db)=>{if(err){console.log('数据库连接失败!');return;};db.collection('student').insertOne({"name":"qianqian"},(err,result)=>{if(err){console.log('数据插入失败!');db.close();return;};console.log(result);db.close();});});用node命令运行文件后,此时我们可以在控制台或者可视化工具中查看插入结果。在db对象的collection方法中写上collection的名称。如果集合不存在,它将自动创建一个新集合。使用insertOne()方法完成文档的插入。第一个参数是一个json对象,即插入的文档数据。当插入操作完成后,触发其回调函数执行,result表示对插入结果的反馈。由于数据库不能进行长连接,我们一般加上db.close();在完成数据库操作的回调函数结束时关闭数据库。下一次数据库操作需要重新连接数据库。4.删除数据删除数据操作是指删除数据库指定集合中符合过滤条件的文档。同样在完成数据库连接的回调函数中对db对象进行操作。示例代码如下:constMongoClient=require('mongodb').MongoClient;vardburl="mongodb://127.0.0.1:27017/test";MongoClient.connect(dburl,(err,db)=>{if(err){console.log('数据库连接失败!');return;};db.collection('student').deleteMany({"name":"qianqian"},(err,result)=>{if(err){console.log('数据删除失败!');db.close();return;};console.log(result);db.close();});});使用方法deleteMany()删除集合中所有满足过滤条件的文档,第一个参数是一个json对象,就是过滤条件。当删除操作完成时,触发其回调函数执行,result表示对删除结果的反馈。5、修改数据数据修改操作是指修改数据库指定集合中所有符合过滤条件的文档。同样在完成数据库连接的回调函数中对db对象进行操作。示例代码如下:constMongoClient=require('mongodb').MongoClient;vardburl="mongodb://127.0.0.1:27017/test";MongoClient.connect(dburl,(err,db)=>{if(err){console.log('数据库连接失败!');return;};db.collection('student').updateMany({"name":"qianqian"},{$set:{"age":18}},(err,result)=>{if(err){console.log('数据修改失败!');db.close();return;};console.log(result);db.close();});});使用updateMany()方法修改集合中所有满足过滤条件的文档。第一个参数是一个json对象,就是过滤条件。第二个参数是一个json对象,是修改条件,语法如上所示。当不写关键字$set时,即{"age":18}表示替换匹配的文档。当修改操作完成后,触发其回调函数执行,result表示对修改结果的反馈。6.查找数据数据查找操作是指在数据库的指定集合中查找所有符合过滤条件的文档。同样在完成数据库连接的回调函数中对db对象进行操作。示例代码如下:constMongoClient=require('mongodb').MongoClient;vardburl="mongodb://127.0.0.1:27017/test";MongoClient.connect(dburl,(err,db)=>{if(err){console.log('数据库连接失败!');return;};varcursor=db.collection("student").find({"name":"qianqian"});varresult=[];cursor.each((err,doc)=>{if(err){console.log('数据搜索失败!');db.close();return;};if(doc!=null){结果.push(doc);}else{console.log(result);db.close();};});});使用方法find()查找集合中所有满足过滤条件的文档,第一个参数是一个json对象,就是过滤条件。首先定义一个空数组存放符合条件的文档对象,搜索完成后触发其回调函数,其中result表示符合条件的文档对象数组。我们在find()方法之后继续添加sort()方法,对搜索到的文档对象进行排序,参数也是一个json对象。另外,mongodb模块还提供了两个函数limit()来限制读取的条数,skip()来表示跳过的条数。它的参数都是类型号。比如将上面的代码修改为:varcursor=db.collection("student").find({"name":"qianqian"}).sort({"age":-1}).skip(0).limit(2);查找结果为:7.获取集合中document对象的总数,也是在完成数据库连接的回调函数中对db对象进行操作。示例代码如下:constMongoClient=require('mongodb').MongoClient;vardburl="mongodb://127.0.0.1:27017/test";MongoClient.connect(dburl,(err,db)=>{if(err){console.log('数据库连接失败!');return;};db.collection("student").count({}).then(function(count){console.log(count);分贝.close();});});回调函数中的count表示数据库student集合中数据文档的数量。2、封装node.js操作mongodb常用函数我们按照node.js模块化开发的基本流程写了一个db.js模块,在这个模块中封装了一些对数据库的基本操作函数。db.js示例代码如下:constMongoClient=require('mongodb').MongoClient;vardburl="mongodb://127.0.0.1:27017/test";//连接数据库操作函数_connectDB(callback){MongoClient.connect(dburl,(err,db)=>{callback(err,db);});};//插入函数的封装module.exports.insertOne=function(collection,json,callback){_connectDB(function(err,db){if(err){console.log('数据库连接失败!');return;};db.collection(collection).insertOne(json,(err,result)=>{回调(err,result);db.close();})})};//删除函数的封装module.exports.deleteMany=function(collection,json,callback){_connectDB(function(err,db){if(err){console.log('数据库连接失败!');return;};db.collection(collection).deleteMany(json,(err,result)=>{callback(err,result);db.close();});});};//修改函数的封装module.exports.updateMany=function(collection,json1,json2,callback){_connectDB(function(err,db){if(err){console.log('数据库连接失败!');return;};db.collection(collection).updateMany(json1,json2,(err,result)=>{callback(err,result);db.close();});});};//获取集合中的文档总数module.exports.getAllCount=function(collection,callback){_connectDB(function(err,db){if(err){console.log('数据库连接失败!');return;};db.collection(collection).count({}).then(function(count){回调(count);db.close();});});};//查找函数包module.exports.find=function(collection,json,C,D){if(arguments.length==3){变种回调=C;var跳过编号=0;变量限制=0;var排序={};}elseif(arguments.length==4){varcallback=D;可变参数=C;varskipnumber=参数。pageamount*args.page;varlimit=args.pageamount;变量ort=args.sort;}else{thrownewError('查找函数参数号不正确!');返回;}变种结果=[];_connectDB(function(err,db){if(err){console.log('数据库连接失败!');return;};varcursor=db.collection(collection).find(json).sort(sort).limit(limit).skip(skipnumber);cursor.each((err,doc)=>{if(err){callback(err,null);db.close();return;};if(doc!=null){result.push(doc);}else{callback(null,result);db.close();}})});};在使用这个模块之前,我们先在本机启动mongodb数据库,然后在项目文件夹下下载mongodb的第三方模块包。然后在db.js中修改dburl的值,然后在我们自己的主文件中使用require导入即可。如果主文件1.js和db.js在同一个目录下,在1.js中使用constdb=require('./db.js');只需导入此模块。下面给出主文件的示例代码作为该模块的使用演示:constdb=require('./db.js');db.insertOne('student',{'name':'qianqiang'},(err,result)=>{if(err){console.log('数据插入失败!');db.close();return;};console.log(result);});db.deleteMany('student',{'age':11},(err,result)=>{if(err){console.log('数据删除失败!');db.close();return;};console.log(result);});db.updateMany('student',{'age':18},{$set:{'age':25}},(err,result)=>{if(err){console.log('数据修改失败!');db.close();return;};console.log(result);});db.find('student',{},{'pageamount':2,'page':4,'sort':{}},(err,result)=>{if(err){console.log('数据搜索失败!');db.close();return;};console.log(结果);});db.getAllCount('student',function(count){console.log(count);});其中,find函数中的pageamount表示每页显示的文档对象的个数,page表示显示的第几页的内容(从第0页开始计算)。这样就实现了分页显示搜索数据的功能。
