一、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.jsdb.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数据库的更多相关文章

  1. koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

  2. koa 基础(二十)nodejs 操作mongodb数据库 --- 新增数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

  3. 二十六、Nodejs 操作 MongoDb 数据库

    一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...

  4. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

  5. nodejs 操作 mongodb 数据库

    操作手册: npmjs.com 搜索: mongodb 使用官方的  mongodb 包来操作  https://github.com/mongodb/node-mongodb-native      ...

  6. Nodejs操作MongoDB数据库示例

    //mongodb_demo.js /** cnpm install mongodb */ var MongoClient = require('mongodb').MongoClient; var ...

  7. Koa 操作 Mongodb 数据库

    node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...

  8. NodeJs连接操作MongoDB数据库

    NodeJs连接操作MongoDB数据库 一,介绍 MongoDB是一种文档导向数据库管理系统,由C++撰写而成.介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作. Mongo ...

  9. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

随机推荐

  1. JAVA特性:原子性、可见性、有序性

    Java特性:原子性.可见性.有序性 原子性(操作是不可分.操作不可被中断):是指一个操作是不可中断的.即使是多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰.(synchronized ...

  2. .Net Standard(.Net Core)实现获取配置信息

    一.前言 在.Net Framework框架有专门获取webconfig配置的方法供我们使用,但是在.Net Core或者.Net Standard中没有可以直接使用的方法来获取配置文件信息,下面就来 ...

  3. 控制执行流程之switch语句

    switch语句,同时也是一种选择性语句,其根据整数表达式的值(整数选择因子)选择一段代码去执行.整数选择因子为int类型或者char类型.

  4. 月光宝盒之时间魔法--java时间的前生今世

    月光宝盒花絮 “曾经有一份真诚的爱情摆在我的面前,但是我没有珍惜,等到了失去的时候才后悔莫及,尘世间最痛苦的事莫过于此.如果可以给我一个机会再来一次的话,我会跟那个女孩子说我爱她,如果非要把这份爱加上 ...

  5. 品Spring:bean定义上梁山

    认真阅读,收获满满,向智慧又迈进一步... 技术不枯燥,先来点闲聊 先说点好事高兴一下.前段时间看新闻说,我国正式的空间站建设已在进行当中.下半年,长征五号B运载火箭将在海南文昌航天发射场择机将空间站 ...

  6. 基于WeChat的消息存储备份、远程控制、小功能项目开源分享计划

    WeChat+ 关于该项目 起源 该项目的起因是一个比较程(老)序(油)猿(条)的理由,有一天我发现我下班时间比较早,有点尴尬,但是又不想没事干还坐在公司,那么如何解决我的问题呢,初步想法是远程控制电 ...

  7. redis-分布式锁-刷新信号量

    为什么需要刷新信号量呢,因为信号量有过期时间: 为什么信号量需要过期时间呢,因为需要利用超时特性,解决分布式锁存在的一些固有缺陷. 而对于类似流式API来说,一般10秒的过期时间是远远不够的.因此我们 ...

  8. IPv6系列-彻底弄明白有状态与无状态配置IPv6地址

    深入研究自动分配IPv6地址的Stateless(无状态)与Stateful(有状态)方式 小慢哥的原创文章,欢迎转载 目录 ▪ 一. Link-Local Address的生成方式 ▪ 二. Glo ...

  9. bootstrap具体知识点(2)

    3.以移动设备为优先 <meta name=”viewport” content=”width=device-width,initial-scale=1,user-scalable=no”> ...

  10. HTML5 原生拖放

    前言: HTML5提供专门的拖拽与拖放的API,可以方便的指定某个元素可拖动,可以创建自定义的可拖动元素和放置目标 相关知识点: 1.拖放事件 拖放元素时,将依次触发下列事件 dragstart  按 ...