mongoDB & Nodejs 访问mongoDB (二)
非常详细的文档http://mongodb.github.io/node-mongodb-native/2.2/quick-start/quick-start/
连接数据库
安装express 和 mongodb .
npm install express mongodb --save
通过 MongoClient.connect(url, function(err, db) {})
API 连接
'use strict';
const express = require("express"),
mongoClient = require("mongodb").MongoClient;
var app = express(),
url = 'mongodb://localhost:27017/test';
app.listen(3000, function(err) {
if (err) {
console.log("has error");
}
});
app.get("/", function(req, res) {
mongoClient.connect(url, function(err, db) {
if (err) {
console.log("数据库连接失败")
}
res.send("连接成功");
db.close();
})
})
这样就连接成功了 .
用ES6 还是更棒的, 不过觉得配babel 比较麻烦.., 等到结尾的dao 层封装我会使用ES6的语法来完成
插入数据
提供了两个api,分别为 db.collection("student").insertOne()
& db.collection("student").insertMany
app.get("/", function(req, res) {
mongoClient.connect(url, function(err, db) {
if (err) {
console.log("数据库连接失败")
}
db.collection("student").insertOne({ "name": "筱原明里", "age": "18" }, function(err, result) {
if (err) {
console.log(err);
}
res.send(result);
})
db.collection("student").insertMany([{ "name": "远野贵树", "age": "18" }, { "name": "澄田花苗" }], function(err, result) {
if (err) {
console.log(err);
}
res.send(result);
})
db.close();
})
})
查找和分页
通过db.collection().find() 会返回一个游标,通过游标的迭代来访问所有数据.
注意,each 迭代的过程是异步的 !
app.get("/", function(req, res) {
mongoClient.connect(url, function(err, db) {
if (err) {
console.log("数据库连接失败")
}
var collection = db.collection('student'),
cursor = collection.find({}),
result = [];
cursor.each(function(err, doc) {
console.log(doc)
if (err) {
console.log(err);
}
if (doc == null) {
res.send(result);
}else{
result.push(doc);
}
});
db.close();
})
})
但是通过each判断是否迭代完成并不是很好的方式,mongo给这个游标赋予一个更好的方法
toArray
app.get("/", function(req, res) {
mongoClient.connect(url, function(err, db) {
if (err) {
console.log("数据库连接失败")
}
var collection = db.collection('student'),
cursor = collection.find({});
cursor.toArray(function(err, docs) {
// docs 就是所有的文档
console.log(docs);
})
db.close();
})
})
这样做是取出全部的数据,下面是分页查询呢
mongoDB 的分页查询非常方便,封装的skip
,limit
有点像 .net 中的EF
中的skip
,take
等方法.
app.get("/", function(req, res) {
mongoClient.connect(url, function(err, db) {
if (err) {
console.log("数据库连接失败")
}
var collection = db.collection('student'),
// 跳过5条再取5条
cursor = collection.find({}).skip(10).limit(5);
cursor.toArray(function(err, docs) {
// docs 就是所有的文档
console.log(docs);
})
db.close();
})
})
实际当然不能这么写,稍后会封装一个DAO,在里面会使用参数进行分页
修改
app.get("/", function(req, res) {
mongoClient.connect(url, function(err, db) {
if (err) {
console.log("数据库连接失败")
}
db.collection('student').updateOne({ name: "远野贵树" }, { $set: { age: 20, gender: "男" } }, function(err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
})
db.collection('student').updateMany({ name: "澄田花苗" }, { $set: { age: 20, gender: "女" } }, function(err, result) {
if (err) {
console.log(err);
} else {
res.send(result);
}
})
db.close();
})
})
删除
删除同样包含两个api ,deleteMany
& deleteOne
.
app.get("/", function(req, res) {
mongoClient.connect(url, function(err, db) {
if (err) {
console.log("数据库连接失败")
}
db.collection("student").deleteOne({ 'name': '澄田花苗' }, function(err, result) {
res.send(result);
})
db.collection("student").deleteMany({ 'name': '澄田花苗' }, function(err, result) {
res.send(result);
})
db.close();
})
})
DAO 封装
每次像上面一样调用肯定是不可行的,所以需要封装一个DAO层.
mongodbdao.js
/*
* @Author: Administrator
* @Date: 2017-03-13 17:14:40
* @Last Modified by: Administrator
* @Last Modified time: 2017-03-13 20:24:23
*/
'use strict';
const mongoClient = require("mongodb").MongoClient,
dburl = require("config").dburl;
// 连接数据库,内部函数
function _connectDB(callback) {
mongoClient.connect(dburl, function(err, db) {
if (err) {
console.log(err);
return;
}
callback(err, db);
}
})
}
exports.find = function(collectionName, json, pageOption, callback) {
// 第 0 页,就跳过 0 条,第 1 页,跳过10条 ,取 10条
// skip & limit ,如果参数为0,那么就忽略参数
var skipNumber = pageOption.page * pageOption.count || 0,
takeNumber = pageOption || 0,
sort = pageOption.sort || {};
_connectDB(function(err, db) {
db.collection(collectionName).find(json).skip(skipNumber).limit(takeNumber).sort(sort) toArray(function(err, docs) {
callback(err, docs);
db.close();
});
})
};
exports.insertOne = function(collectionName, json, callback) {
_connectDB(function(err, db) {
db.insertOne(collectionName).insertOne(function(err, res) {
callback(err, res);
db.close();
})
})
}
exports.insertMany = function(collectionName, json, callback) {
_connectDB(function(err, db) {
db.insertOne(collectionName).insertMany(function(err, res) {
callback(err, res);
db.close();
})
})
}
exports.deteleOne = function(collectionName, json, callback) {
_connectDB(function(err, db) {
db.collection(collectionName).deteleOne(json, function(err, res) {
callback(err, res);
db.close();
})
})
};
exports.deteleMany = function(collectionName, json, callback) {
_connectDB(function(err, db) {
db.collection(collectionName).deteleMany(json, function(err, res) {
callback(err, res);
db.close();
})
})
};
exports.updateOne = function(collectionName, jsonQeury, jsonSet, callback) {
_connectDB(function(err, db) {
db.collection(collectionName).updateOne(jsonQeury, { $set: jsonSet }, function(err, res) {
callback(err, res);
db.close();
})
})
};
exports.updateMany = function(collectionName, jsonQeury, jsonSet, callback) {
_connectDB(function(err, db) {
db.collection(collectionName).updateMany(jsonQeury, { $set: jsonSet }, function(err, res) {
callback(err, res);
db.close();
})
})
};
exports.getAllCount = function(collectionName, json, callback) {
_connectDB(function(err, db) {
db.collection(collectionName).count(json, function(err, count) {
callback(err, count);
db.close();
})
})
};
简单地完成了一个DAO 的封装,但是在项目中, 也是不会这样用的
因为有一个更强大的东西 mongooose
,它就相当于 EF
之于 ADO.NET
.
mongoDB & Nodejs 访问mongoDB (二)的更多相关文章
- mongoDB & Nodejs 访问mongoDB (一)
最近的毕设需要用到mongoDB数据库,又把它拿出来再学一学,下盘并不是很稳,所以做一些笔记,不然又忘啦. 安装 mongoDB & mongoVUE mongoDB: https://www ...
- MongoDB最简单的入门教程之二 使用nodejs访问MongoDB
在前一篇教程 MongoDB最简单的入门教程之一 环境搭建 里,我们已经完成了MongoDB的环境搭建. 在localhost:27017的服务器上,在数据库admin下面创建了一个名为person的 ...
- 使用nodejs 访问mongodb
我使用了 express 框架 目录结构 db.js 文件 function connectionDB(hostname, port) { //注释地方暂时没有使用.是把官方代码照抄下来 // var ...
- 使用 MongoDB shell访问MongoDB
- NodeJS+Express+MongoDB
一.MongoDB MongoDB是开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序丰富:高伸缩性:MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言 ...
- MongoDB最简单的入门教程之五-通过Restful API访问MongoDB
通过前面四篇的学习,我们已经在本地安装了一个MongoDB数据库,并且通过一个简单的Spring boot应用的单元测试,插入了几条记录到MongoDB中,并通过MongoDB Compass查看到了 ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- nodejs学习笔记二——链接mongodb
a.安装mongoose库用来链接mongodb数据库 安装mongodb数据库参考mongodb安装 前言(怨言) 本来是想安装mongodb库来链接mongodb的,命令行到nodejs工程目录: ...
随机推荐
- PHPCMS 详情页静态化
<?php defined('IN_PHPCMS') or exit('No permission resources.'); pc_base::load_app_class('admin',' ...
- HDU1848-Fibonacci again and again
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1848 这个题目代码不是很复杂,但那个等价类,(SG函数)没怎么理解, 题目难,不过代码不怎么复杂,在网 ...
- 网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)
我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,来判断网站是否有性能问题,或者存在哪些需要改进的地方 对 ...
- SSM框架注解整合
一.web应用环境 1.ServletContext 对于一个web应用,其部署在web容器(比如:tomcat)中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext, ...
- 【Unity3d游戏开发】浅谈UGUI中的Canvas以及三种画布渲染模式
一.Canvas简介 Canvas画布是承载所有UI元素的区域.Canvas实际上是一个游戏对象上绑定了Canvas组件.所有的UI元素都必须是Canvas的自对象.如果场景中没有画布,那么我们创建任 ...
- (@WhiteTaken)设计模式学习——抽象工厂模式
抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的 ...
- 矢量切片(Vector tile)
说明:本月的主要工作都是围绕制作矢量切片这一个核心问题进行的,所以2月的主题就以这个问题为主,目前分支出来的一些内容主要包括了TMS(Tile map service),OpenLayers3中的Pr ...
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
2017-01-06 Tomson JavaScript 转自 https://segmentfault.com/a/1190000003818163 闭包 1.正确的说,应该是指一个闭包域,每当声明 ...
- 分享jquery.cookie.js
代码如下: /*! * jQuery Cookie Plugin v1.4.1 * https://github.com/carhartl/jquery-cookie * * Copyright 20 ...
- 关于Console控制台输出的玩法
你在浏览网页的时候,是否注意过这些网页的控制台输出了什么? Console这种东西,其实一般只有前端工作者才会注意到.console在我们实际开发中可是个宝贝,他是各种error和warning的展示 ...