node-mongodb-native的介绍

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

官方文档:http://mongodb.github.io/node-mongodb-native/

node-mongodb-native的基本使用

安装mongodb

npm install mongodb --save

引入mongodb下面的MongoClient

var MongoClient = require('mongodb').MongoClient;

定义数据库连接的地址 以及配置数据库

var url = 'mongodb://localhost:27017/';
var dbName = 'koa' // koa数据库的名称

nodejs连接数据库

MongoClient.connect(url,function(err,client){
const db = client.db(dbName); // 数据库db对象
})

操作数据库

db.user.insert
MongoClient.connect(url,function(err,db){
db.collection('user').insertOne({"name":"张三"},function(err,result){
client.close() //关闭连接
})
})
var MongoClient = require('mongodb').MongoClient;

var dbUrl = 'mongodb://localhost:27017/';
var dbName = 'koa' // koa数据库的名称 console.time('start1'); //连接数据库
MongoClient.connect(dbUrl,(err, client)=>{
if(err){
console.log(err);
return;
} var db = client.db(dbName);
//查询数据
var result = db.collection('user').find({});
result.toArray((err,docs)=>{
console.timeEnd('start1');
console.log(docs);
})
}) console.time('start2');
// 连接数据库
MongoClient.connect(dbUrl,(err,client)=>{
if(err){
console.log(err);
return;
}
var db=client.db(dbName);
//查询数据
db.collection('user').insertOne({"name": "张三"},function(err, result){
if(!err) {
console.log('添加数据成功');
client.close();
}
})
})

将操作mongodb的方法封装

在实际的项目中我们操作数据的方法最好单独封装到一个模块里面,进行调用,不用每次都连接数据库(连接数据库很耗费时间)然后进行数据库的增删改查

首先创建一个node应用,并且在项目中创建一个操作数据库的模块module/mongodb文件夹,里面三个文件分别是config.js(数据库配置文件),db.js(操作数据库),代码依次如下

// 数据库配置文件
var app = {
dbUrl: 'mongodb://localhost:27017/',
dbName: 'koa'
}
module.exports = app
// 操作数据库

var MongoClient = require('mongodb').MongoClient;
var Config = require('./config.js'); class Db {
constructor () {
this.dbClient = ''; // 属性 放db对象
this.connect(); // 实例化的时候就连接数据库
} // 单例 多次实例化实例不共享的问题
static getInstance(){
if(!Db.instance){
Db.instance = new Db();
}
return Db.instance;
} // 连接数据库
connect(){
let _that = this;
return new Promise((resolve,reject)=>{
if(!_that.dbClient){ // 解决数据库多次连接的问题
MongoClient.connect(Config.dbUrl,(err,client)=>{
if(err){
reject(err)
}else{
_that.dbClient = client.db(Config.dbName);
resolve(_that.dbClient)
}
}) }else{
resolve(_that.dbClient);
}
})
} // 查找数据
find(collectionName,json){
return new Promise((resolve,reject)=>{
this.connect().then((db)=>{
var result = db.collection(collectionName).find(json);
result.toArray(function(err,docs){
if(err){
reject(err);
return;
}
resolve(docs);
})
})
})
}
update(collectionName,json){
// .....
}
insert(collectionName,json){
// .....
}
}

在app.js中使用封装的数据库方法

let Koa = require('koa')
let router = require('koa-router')()
let DB = require('./module/mongodb/db') var app = new Koa() router.get('/',async (ctx)=>{
console.time('start首页');
var result = await DB.find('user',{});
console.timeEnd('start首页');
console.log(result);
ctx.body = result;
})
router.get('/news',async (ctx)=>{
console.time('start新闻');
var result = await DB.find('user',{});
console.timeEnd('start新闻');
console.log(result);
ctx.body = result;
}) app.use(router.routes()); /*启动路由*/
app.use(router.allowedMethods());
app.listen(3000);

启动服务后,浏览器运行

操作mongodb实战DEMO

我们来实现一个list列表的增删该查,结合实际的页面来操作mongodb数据库,首先封装操作mongodb的库

// 数据库配置文件
var app = {
dbUrl: 'mongodb://localhost:27017/',
dbName: 'koa'
}
module.exports = app
var MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID; var Config = require('./config.js'); class Db {
constructor () {
this.dbClient = ''; // 属性 放db对象
this.connect(); // 实例化的时候就连接数据库
} // 单例 多次实例化实例不共享的问题
static getInstance(){
if(!Db.instance){
Db.instance = new Db();
}
return Db.instance;
} // 连接数据库
connect(){
let _that = this;
return new Promise((resolve,reject)=>{
if(!_that.dbClient){ // 解决数据库多次连接的问题
MongoClient.connect(Config.dbUrl,(err,client)=>{
if(err){
reject(err)
}else{
_that.dbClient = client.db(Config.dbName);
resolve(_that.dbClient)
}
}) }else{
resolve(_that.dbClient);
}
})
} // 查找数据
find(collectionName,json){
return new Promise((resolve,reject)=>{
this.connect().then((db)=>{
var result = db.collection(collectionName).find(json);
result.toArray(function(err,docs){
if(err){
reject(err);
return;
}
resolve(docs);
})
})
})
} // 更新数据
update(collectionName,oldJson,newJson){
return new Promise((resolve,reject) => {
this.connect().then((db)=> {
db.collection(collectionName).updateOne(oldJson,{
$set:newJson
}, (err,result) => {
if(err){
reject(err);
}else{
resolve(result);
}
})
})
})
} //新增数据
insert(collectionName,json){
return new Promise((resolve, reject) => {
this.connect().then((db) => {
db.collection(collectionName).insertOne(json,(err,result) => {
if(err){
reject(err);
}else{
resolve(result);
}
})
})
})
} // 删除数据
remove(collectionName,json){
return new Promise((resolve,reject) => {
this.connect().then((db) => {
db.collection(collectionName).removeOne(json,(err,result) => {
if(err){
reject(err);
}else{
resolve(result);
}
})
})
})
} //mongodb里面查询 _id 把字符串转换成对象
getObjectId(id){
return new ObjectID(id);
}
} module.exports = Db.getInstance();

然后再创建前端的页面分别有list.html,add.html,edit.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.table{
width:100%;
border-collapse: collapse;
}
.table td,.table th{
border: 1px solid #ccc;
text-align: center;
}
</style>
</head>
<body>
<br/>
<br/>
<a href="/add">增加用户</a>
<br/>
<br/>
<table class="table">
<tr>
<th>姓名</th>
<th>年龄</th>
<th>性别</th> <th>操作</th>
</tr>
{{each list}}
<tr>
<td>{{$value.username}}</td>
<td>{{$value.age}}</td>
<td>{{$value.sex}}</td>
<td>
<a href="/edit?id={{@$value._id}}">编辑</a>  
<a href="/delete?id={{@$value._id}}">删除</a>
</td>
</tr>
{{/each}}
</table>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<h2>用户增加</h2>
<form action="/doAdd" method="post">
用户名:<input type="text" name="username"/>
<br/>
<br/>
年 龄:<input type="text" name="age"/>
<br/>
<br/>
性别:<input type="text" name="sex"/>
<br/>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<h2>编辑用户</h2>
<form action="/doEdit" method="post">
用户id:<input type="hidden" name="id" value="{{@list._id}}"/>
用户名:<input type="text" name="username" value="{{list.username}}"/>
<br/>
<br/>
年 龄:<input type="text" name="age" value="{{list.age}}"/>
<br/>
<br/>
性别:<input type="text" name="sex" value="{{list.sex}}"/>
<br/>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
var Koa = require('koa'),
router = require('koa-router')(),
render = require('koa-art-template'),
path = require('path'),
bodyParser = require('koa-bodyparser'),
DB = require('./module/mongodb/db.js'); var app=new Koa(); //配置post提交数据的中间件
app.use(bodyParser()); //配置 koa-art-template模板引擎
render(app, {
root: path.join(__dirname, 'views'), // 视图的位置
extname: '.html', // 后缀名
debug: process.env.NODE_ENV !== 'production' //是否开启调试模式
}); // 首页
router.get('/',async (ctx)=>{
ctx.body="首页";
}) //显示列表
router.get('/list',async (ctx)=>{
var result=await DB.find('user',{});
console.log(result);
await ctx.render('list',{
list:result
});
}) //新增页面
router.get('/add',async (ctx)=>{
await ctx.render('add');
}) //执行新增操作
router.post('/doAdd',async (ctx)=>{
// console.log(ctx.request.body); //获取表单提交的数据
let data = await DB.insert('user',ctx.request.body);
try{
if(data.result.ok){
ctx.redirect('/list')
}
}catch(err){
console.log(err);
return;
ctx.redirect('/add');
}
}) //编辑页面
router.get('/edit',async (ctx)=>{
//通过get传过来的id来获取用户信息
let id=ctx.query.id;
let data=await DB.find('user',{"_id":DB.getObjectId(id)});
//获取用户信息
await ctx.render('edit',{
list:data[0]
});
}) // 执行编辑操作
router.post('/doEdit',async (ctx)=>{
//通过get传过来的id来获取用户信息
//console.log(ctx.request.body); var id=ctx.request.body.id;
var username=ctx.request.body.username;
var age=ctx.request.body.age;
var sex=ctx.request.body.sex; let data=await DB.update('user',{"_id":DB.getObjectId(id)},{
username,age,sex
}) try{
if(data.result.ok){
ctx.redirect('/list')
}
}catch(err){
console.log(err);
return;
ctx.redirect('/list');
}
}) //删除学员
router.get('/delete',async (ctx)=>{
let id=ctx.query.id;
var data=await DB.remove('user',{"_id":DB.getObjectId(id)});
console.log(data);
if(data){
ctx.redirect('/list')
}
}) app.use(router.routes()); /*启动路由*/
app.use(router.allowedMethods());
app.listen(3000);

Koa 操作 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. 利用koa实现mongodb数据库的增删改查

    概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...

  4. 不使用spring的情况下原生java代码两种方式操作mongodb数据库

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  5. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  6. NodeJs连接操作MongoDB数据库

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

  7. C# Asp.net中简单操作MongoDB数据库(二)

    C# Asp.net中简单操作MongoDB数据库(一)    , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...

  8. C# Asp.net中简单操作MongoDB数据库(一)

    需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...

  9. PHP操作MongoDB 数据库

    最近有个项目,需要用php操作mongoDb数据,整理如下 1,连接MongoDB数据库 $conn = new Mongo(); 其他链接方式 //$conn=new Mongo(); #连接本地主 ...

随机推荐

  1. 你需要知道的 5 个 Linux 新手会犯的失误

    Linux 爱好者们分享了他们犯下的一些最大错误. 终身学习是明智的 —— 它可以让你的思维敏捷,让你在就业市场上更具竞争力.但是有些技能比其他技能更难学,尤其是那些小菜鸟错误,当你尝试修复它们时可能 ...

  2. 通过创建一个简单的骰子游戏来探究 Python

    在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏.这次,我将展示如何使用 Python 模块 Pygame 来创建一个图形化游戏.它将需要几篇文章才 ...

  3. 电缆公司如何面对企业改革?MES系统打造智能工厂

    项目背景 目前,“互联网+电缆”正在成为电缆行业发展的主流,作为中国领先的大型电缆企业江苏亨通电力电缆有限公司(简称“亨通电缆”)积极响应国家提出的“中国制造2025”号召,实施MES工程项目,启用智 ...

  4. 一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南

    让我们跟着Jerry的文章,一起回到本世纪初那个单纯美好的年代. 2000年9月,Jerry告别了自己的高中时代,进入到自己心目中的电子游戏大学,开始了四年的本科生活.每个新生,都拿到了这样一本薄薄的 ...

  5. linux 中常遇到的问题

    1.上传文件是速度为零 xshell连接对应的Ubuntu服务器上在Ubuntu服务器上安装lrzszsudo apt install lrzsz xshell连接对应的centos服务器上 yum  ...

  6. 使用SSH配置git服务器免密提交

    1. 生成SSH 1.1下载 下载工具 puttygen.exe ,当然其他工具请自行搜索. 下载地址: 下载地址1   百度网盘 (提取码: if8g)https://pan.baidu.com/s ...

  7. LINUX下查看日志信息

    Linux下grep显示多行信息标准unix/linux下的grep通过以下参数控制上下文 grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行 例如 grep -C ...

  8. Linux-普通用户切换为root身份

    Linux 下普通用户免密码切换 root 用户 具体步骤: 1)编辑 su 文件打开第四行注释 # vim /etc/pam.d/su 2)将用户添加到 wheel 组 # usermod -G w ...

  9. spring cloud (七) Config server基于svn配置

    1 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  10. centos服务器上git clone下载加速

    最近在服务器上直接git clone github上的仓库,下载速度只有十几KB,简直不要太慢! 网上搜了一些加速的,自己于是写了下面的总结. 1. nslookup命令 如果执行这个命令找不到,请先 ...