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模块来对数据库进行增删改查等操作. 首先, ...
随机推荐
- Unity3D_07_日志、文本打印
1.Debug.Log(“hello”); 2.打开控制台查看日志:ctrl+shift+c 3.输出一个位置的坐标(需要转换成字符串.ToString()) Vector3 worldPositio ...
- Oracle创建自增主键表
1.创建表 /*第一步:创建表格*/ create table t_user( id int primary key, --主键,自增长 username varchar(), password va ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试
最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...
- 编写优雅代码,从挖掉恶心的if/else 开始
背景 长话短说, 作为开发人员经常需要根据条件灵活查询数据库,不管你是用rawsql 还是EFCore, 以下类似伪代码大家都可能遇到: /// <summary> /// 灵活查询 能耗 ...
- SpringCloud微服务笔记-Nginx实现网关反向代理
背景 当前在SpringCloud微服务架构下,网关作为服务的入口尤为重要,一旦网关发生单点故障会导致整个服务集群瘫痪,为了保证网关的高可用可以通过Nginx的反向代理功能实现网关的高可用. 项目源码 ...
- go语言-最大32位数反转
package main import ( "fmt" "strconv" ) func fanzhuang32(number int) string { fu ...
- (6)autotools工具的使用
autotools是专门用来生成Makefile的一系列工具,包括autoscan.aclocal.autoheader.autoconf.automake等. (1)autotools ...
- mybatis简单入门介绍
mybatis入门 简介 什么是mybatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及 ...
- mapper操作数据的同时返回操作后的值
<insert id="insertSelective" parameterType="com.test.entity.business" keyProp ...
- ajax技术实现登录判断用户名是否重复以及利用xml实现二级下拉框联动,还有从数据库中获得
今天学了ajax技术,特地在此写下来作为复习. 一.什么是ajax? 客户端(特指PC浏览器)与服务器,可以在[不必刷新整个浏览器]的情况下,与服务器进行异步通讯的技术 即,AJAX是一个[局部刷新 ...