NodeJS操作MongoDB数据库
一、node.js对于mongodb的基本操作
1、数据库的开机
首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档。如D:\mongo
,接下去在cmd
当中键入命令-> mongod --dbpath D:\mongo
来实现数据库的开机。如下图所示:
接下去就保持这个cmd
控制面板处于这种状态,以确保数据库处于开机状态。
2、连接数据库
在node.js
当中操作mongodb
数据库需要引入第三方模块包mongodb
。所以我们先在项目文件夹下键入命令-> npm install mongodb
来完成下载包。接下去再用const MongoClient = require('mongodb').MongoClient;
来完成引包。示例代码如下所示:
const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
if(err){
console.log('数据库连接失败!');
return;
};
console.log(db);
});
我们先定义一个dburl
变量用于指定本机上27017
端口号(mongodb
的默认端口号)上的数据库地址。test
为自定义的数据库的名字。若该数据库不存在则会自动完成该数据库的新建。接下去完成与本机上test
数据库的连接,这是一个异步函数,当连接完成之后,触发执行其回调函数,参数db
指代这个数据库本身。接下去对数据库的增删改查操作都写在连接的回调函数当中。
3、插入数据
数据插入操作,指的是对数据库的某个指定集合进行文档对象的插入。同样是在完成数据库连接的回调函数当中对db
这个对象进行操作。示例代码如下所示:
const MongoClient = require('mongodb').MongoClient;
var dburl = "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
方法当中写入集合的名字,若该集合不存在则自动完成新建,使用方法insertOne()
来完成一条文档的插入,第一个参数为一个json
对象,即插入的那一条文档数据。当完成插入操作之后触发执行其回调函数,result
表示对插入结果的反馈。由于数据库不能进行长连接,我们一般都在完成数据库操作的回调函数的最后加上db.close();
来关闭数据库。下一次数据库操作时需要重新连接数据库。
4、删除数据
数据删除操作,指的是对数据库的某个指定集合当中匹配上筛选条件的文档进行删除。同样是在完成数据库连接的回调函数当中对db
这个对象进行操作。示例代码如下所示:
const MongoClient = require('mongodb').MongoClient;
var dburl = "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
这个对象进行操作。示例代码如下所示:
const MongoClient = require('mongodb').MongoClient;
var dburl = "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
这个对象进行操作。示例代码如下所示:
const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
if(err){
console.log('数据库连接失败!');
return;
};
var cursor = db.collection("student").find({"name":"qianqian"});
var result = [];
cursor.each((err,doc)=>{
if(err){
console.log('数据查找失败!');
db.close();
return;
};
if(doc!=null){
result.push(doc);
}else{
console.log(result);
db.close();
};
});
});
使用方法find
()
来对该集合当中所有符合筛选条件的文档全部进行查找,第一个参数为一个json
对象,即筛选条件。先定义一个空数组,用于存放符合条件的文档对象,当完成查找操作之后触发执行其回调函数,这里的result
表示符合条件的文档对象的数组。
我们在find()
方法后面继续加上sort()
方法可以实现对查找的文档对象的排序操作,参数同样是一个json
对象。此外mongodb
模块还提供了两个函数limit()
表示限制读取的条数,skip()
表示略过的条数。其参数均为number
类型。如把上述代码修改为: var cursor = db.collection("student").find({"name":"qianqian"}).sort({"age":-1}).skip(0).limit(2);
查找结果为:
7、获取该集合当中文档对象的总数
同样是在完成数据库连接的回调函数当中对db
这个对象进行操作。示例代码如下所示:
const MongoClient = require('mongodb').MongoClient;
var dburl = "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);
db.close();
});
});
在回调函数当中的count
即代表数据库的student
这个集合当中数据文档的数目。
二、node.js操作mongodb的常用函数的封装
我们写一个db.js
模块,在该模块当中封装对数据库的一些基本操作函数。其中db.js
的示例代码如下所示:
const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
//连接数据库操作
function _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)=>{
callback(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){
callback(count);
db.close();
});
});
};
//查找函数的封装
module.exports.find = function(collection,json,C,D){
if(arguments.length == 3){
var callback = C;
var skipnumber = 0;
var limit = 0;
var sort = {};
}else if(arguments.length == 4){
var callback = D;
var args = C;
var skipnumber = args.pageamount * args.page;
var limit = args.pageamount;
var sort = args.sort;
}else{
throw new Error('find函数参数个数不正确!');
return;
}
var result = [];
_connectDB(function(err,db){
if(err){
console.log('数据库连接失败!');
return;
};
var cursor = 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
当中使用const db = require('./db.js');
对该模块进行引入即可。下面给出主文件的示例代码,作为该模块的使用示范:
const db = 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(result);
});
db.getAllCount('student',function(count){
console.log(count);
});
其中find
函数当中的pageamount
表示每页显示的文档对象的条数,page
表示显示第几页的内容(从第0
页开始计数)。以此来实现对查找数据分页显示的功能。
NodeJS操作MongoDB数据库的更多相关文章
- koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
- koa 基础(二十)nodejs 操作mongodb数据库 --- 新增数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
- 二十六、Nodejs 操作 MongoDb 数据库
一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...
- nodejs操作mongodb数据库封装DB类
这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...
- nodejs 操作 mongodb 数据库
操作手册: npmjs.com 搜索: mongodb 使用官方的 mongodb 包来操作 https://github.com/mongodb/node-mongodb-native ...
- Nodejs操作MongoDB数据库示例
//mongodb_demo.js /** cnpm install mongodb */ var MongoClient = require('mongodb').MongoClient; var ...
- Koa 操作 Mongodb 数据库
node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...
- NodeJs连接操作MongoDB数据库
NodeJs连接操作MongoDB数据库 一,介绍 MongoDB是一种文档导向数据库管理系统,由C++撰写而成.介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作. Mongo ...
- nodeJS中使用mongoose模块操作mongodb数据库
在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...
随机推荐
- Ganglia环境搭建并监控Hadoop分布式集群
简介 Ganglia可以监控分布式集群中硬件资源的使用情况,例如CPU,内存,网络等资源.通过Ganglia可以监控Hadoop集群在运行过程中对集群资源的调度,作为简单地运维参考. 环境搭建流程 1 ...
- Dart类型变量-表示信息
Dart执行入口 Dart要求以main函数作为执行的入口 Dart的变量和类型 在Dart中可以用var或者具体的类型来声明一个变量.当使用var定义变量时,表示类型是由编译器推断决定.使用静态类型 ...
- Java面试-如何获取客户端真实IP
在进行一些小游戏开发时,我们经常比较关注的一个功能便是分享.针对分享,我们希望能根据各个城市或者地区,能有不同的分享文案,辨识地区的功能如果由服务器来完成的话,我们就需要知道客户端的真实IP.今天我们 ...
- px、em、rem、%、vw、vh、vm这些单位的区别
1.px px就是像素,也是我们现在经常使用的基本单位,比如常常听到的电脑像素是1024x768的,表示的是水平方向是1024个像素点,垂直方向是768个像素点. 2.em em参考物是父元素的fon ...
- App引流增长技术:Deeplink(深度链接)技术
移动互联网时代,信息的分享传播无疑是 App 引流增长的关键,与其花费大量精力和成本找渠道.硬推广,不如从细节下手,用最快最简便的方法实现 Deeplink(深度链接)技术,打破信息孤岛.缩短分享路径 ...
- Python3.7.4入门-2流程控制工具
2 流程控制工具 记得在语句后加冒号 2.1 while # Fibonacci series: # the sum of two elements defines the next a, b = 0 ...
- 代码审计之XSS及修复
xss在平时的测试中,还是比较重要的,如果存在储存型xss,就可以做很多事情了,打cookie,添加管理员等等很多操作. 以下所有代码都是我自己写的,可能有不美观,代码错误等等问题,希望大家可以指正. ...
- 夯实Java基础系列9:深入理解Class类和Object类
目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...
- web前端开发面试题(附答案)-2
1.label是什么标签,有什么作用?和for属性使用的作用? label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上. label 元素不会向用户呈现 ...
- 转载:alpha测试和beta测试的区别;黑盒测试和白盒测试的区别;
alpha测试版,有点相当于内部测试,一般开发人员在场 ,是由用户做测试,但开发人员在场,一般是请用户到开发现场去测试 beta测试版,完全交给用户,由用户做测试,返回测试报告,相当于发行前的一个 ...