koa mysql mongodb_koa 操作MongoDB數據庫

安裝

安裝MongoDB

npm install mongodb --save

引入中間件

引入mongodb下面的連接模塊MongoClient

// 引入MongoDB 連接模塊

const MongoClient = MongoDB.MongoClient;

配置中間件

定義數據庫連接的地址以及配置數據庫的名稱

let url = "mongodb://localhost:27017/";

let dbName = "koa";

連接數據庫

nodejs連接數據庫

MongoClient.connect(url,(err,client)=>{

if(err){

console.log(err);

return false;

}

let db = client.db(dbName); //數據庫db對象

});

操作數據庫

MongoClient.connect(url,(err,client)=>{

if(err){

console.log(err);

return false;

}

let db = client.db(dbName); //數據庫db對象

db.collection('user').insertOne({'name':'張三'}, function(err, result){

if(!err){

console.log('數據增加成功');

clinet.close(); //關閉連接

}

});

let cx = db.collection('user').find({});

cx.toArray((err,docs)=>{

console.log(docs);

});

});

封裝MongoDB庫,優化【連接數據庫】和【操作數據庫】操作

最終會有兩個文件,一個是 MongoDB配置文件MongoDB.config.js和一個是MongoDB封裝文件MongoDB.db.js。

MongoDB.config.js文件:

// MongoDB數據庫配置文件

const app = {

// 定義數據庫地址

'dbUrl' : 'mongodb://localhost:27017/',

// 定義數據庫名字

'dbName' : 'koa'

};

module.exports = app;

MongoDB.db.js文件:

/*

封裝DB庫操作

*/

// 引入MongoDB 模塊

const MongoDB = require("mongodb");

// 引入MongoDB 連接模塊

const MongoClient = MongoDB.MongoClient;

// 引入MongoDB ObjectID模塊

const ObjectID = MongoDB.ObjectID;

// 引入配置文件

const Config = require("./MongoDB.config.js");

class Db {

// 單例模式,解決多次實例化時候每次創建連接對象不共享的問題,實現共享連接數據庫狀態

static getInstance() {

if (!Db.instance) {

Db.instance = new Db();

}

return Db.instance;

}

constructor() {

// 屬性 存放db對象

this.dbClient = "";

// 實例化的時候就連接數據庫,增加連接數據庫速度

this.connect();

}

// 連接數據庫

connect() {

return new Promise((resolve, reject) => {

// 解決數據庫多次連接的問題,要不然每次操作數據都會進行一次連接數據庫的操作,比較慢

if (!this.dbClient) {

// 第一次的時候連接數據庫

MongoClient.connect(Config.dbUrl, (err, client) => {

if (err) {

reject(err);

} else {

// 將連接數據庫的狀態賦值給屬性,保持長連接狀態

this.dbClient = client.db(Config.dbName);

resolve(this.dbClient);

}

});

} else {

// 第二次之后直接返回dbClient

resolve(this.dbClient);

}

});

}

/**

* 查詢數據庫

* 使用方法: let result = await DB.find('user',{});

* @param {String} collectionName 集合名稱、數據表名

* @param {Object} json 查詢的條件

*/

find(collectionName, json) {

return new Promise((resolve, reject) => {

this.connect().then((db) => {

// 操作db庫里的某一個表,返回符合條件的內容,json查找的條件

let result = db.collection(collectionName).find(json);

result.toArray(function (err, docs) {

if (err) {

reject(err);

return;

}

resolve(docs);

});

});

});

}

/**

* 更新數據庫

* 使用方法: let result = await DB.update('user',{'username':'lisi'},{'username':'李四'});

* @param {String} collectionName 集合名稱、數據表名

* @param {Object} json1 需要更新數據的條件

* @param {Object} json2 新數據的內容

*/

update(collectionName, json1, json2) {

return new Promise((resolve, reject) => {

this.connect().then((db) => {

// 操作db庫里的某一個表,更新一條數據,json1查找的內容,json2更新的新內容,回調函數

db.collection(collectionName).updateOne(

json1,

{

$set: json2,

},

(err, result) => {

if (err) {

reject(err);

} else {

resolve(result);

}

}

);

});

});

}

/**

* 插入數據庫

* 使用方法: let result = await DB.insert('user',{'username':'趙六666','age':30,'sex':'女','status':'2'});

* @param {String} collectionName 集合名稱、數據表名

* @param {Object} json 插入的新數據

*/

insert(collectionName, json) {

return new Promise((resolve, reject) => {

this.connect().then((db) => {

// 操作db庫里的某一個表,插入一條數據,json插入的新內容,回調函數

db.collection(collectionName).insertOne(json, (err, result) => {

if (err) {

reject(err);

} else {

resolve(result);

}

});

});

});

}

/**

* 批量插入數據庫

* 使用方法: let result = await DB.insert('user',[{'username':'趙六666','age':30,'sex':'女','status':'2'},{'username':'趙六666','age':30,'sex':'女','status':'2'},{'username':'趙六666','age':30,'sex':'女','status':'2'}...]);

* @param {String} collectionName 集合名稱、數據表名

* @param {Array} json 批量插入的新數據

*/

insertMany(collectionName, arr) {

return new Promise((resolve, reject) => {

this.connect().then((db) => {

// 操作db庫里的某一個表,批量插入一組數據,arr批量插入的新內容,回調函數

db.collection(collectionName).insertMany(arr, (err, result) => {

if (err) {

reject(err);

} else {

resolve(result);

}

});

});

});

}

/**

* 刪除數據

* 使用方法: let result = await DB.remove('user',{'username':'李四'});

* @param {String} collectionName 集合名稱、數據表名

* @param {Object} json 刪除數據的條件

*/

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);

}

});

});

});

}

/**

* 通過id查詢數據時候需要用到此方法,MongoDB里面查詢_id ,把字符串轉換成對象

* MongoDB數據庫里的_id是自動生成的,通過dind方法查詢結果可以看到形式如: {"_id": ObjectId("5aad299bc166236421c99d229")},直接傳入5aad299bc166236421c99d229,是查詢不到結果的,所以需要包裝一下

* 使用方法: let result = await DB.find('user',{'_id': DB.getObjectID(xxxxx)});

* @param {String} id 要查詢的id

*/

getObjectID(id) {

return new ObjectID(id);

}

}

module.exports = Db.getInstance();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529544.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529544.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529544.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 64位 安裝1045_MySql?安裝時的1045錯誤

MySql 安裝到最后一步遇到1045錯誤Access denied for user rootlocalhost (usingpassword:YES)解決方案一:卸載MySQL,重新安裝1, 卸載MySQL2, 刪除目錄 C:\Documents and Settings\All Users\ApplicationData\MySQL,還要刪除MySQL安裝目錄3, 重新安裝MyS…

mysql工作表格制作教程_Access制作復雜報表

何制作復雜報表利用excel輸出復雜報表 在讀這篇文章以前首先要提醒大家,Access 本身的報表也具有很強的實用性和強大的功能,只有當你發掘了其本身全部的功能卻仍不能滿足你對報表的特殊要求時才請使用 Excel 輸出報表。很明顯,使用 Excel 輸出…

php+mysql投票代碼_PHP+jQuery+MySql實現紅藍投票功能

本文是一篇綜合知識應用類文章,需要您具備PHP、jQuery、MySQL以及html和css方面的基本知識。本文在《PHPMySqljQuery實現的“頂”和“踩”投票功能》一文基礎上做了適當改進,共用了數據表,您可以先點擊了解這篇文章。HTML我們需要在頁面中展示…

numpy 最大值_第 85 天:NumPy 統計函數

數學統計在我們的程序當中特別是數據分析當中是必不可少的一部分,本文就來介紹一下 NumPy 常見的統計函數。最大值與最小值numpy.amin()用于計算數組中的元素沿指定軸的最小值。可以通過 axis 參數傳入坐標軸來指定統計的軸,當指定 axis 時,a…

java中如何實現變量可配置_Java基礎-如何配置環境變量

Java環境變量詳細教程第一步、打開電腦環境變量設置窗口以Win10系統為例子。在桌面找到此電腦,右鍵此電腦— —>屬性,點擊屬性— —>點擊左側高級系統設置點擊高級系統設置點擊環境變量第二步、新建JAVA_HOME點擊系統變量中的新建,出現輸入框&…

python三引號解析_[宜配屋]聽圖閣

和C語言一樣,引號屬于特殊功能字符,不能夠像普通字符那樣直接通過print打印,需要進行一些處理,比如說反斜杠轉義等。這里介紹幾種打印三引號的方法,希望對需要的朋友有用。1、第一中方法比較簡單,直接使用三…

abaqus python 建立節點集合_在Python中創建Abaqus集

我想用Python在Abaqus中創建一個帶邊的幾何集。我不會事先知道邊的數目。嘗試將邊放入數組中,然后創建集合。你知道嗎myEdgesForSet []for i in range(0, len(mdb.models[Model].parts[Part].edges)):if something in mdb.models[Model].parts[Part].edges[i].feat…

java類默認訪問權限_Java的四種訪問權限

? 所謂訪問權限,指的就是本類中的成員變量、成員方法對其他類的可見性?試想一想,當我們修改一個非常龐大的項目時,如果所有變量和方法都是公共權限,那么后端中任何類都有權限去修改它的變量和方法,很有可能修改后就導…

java 數組 反射_【譯】10. Java反射——數組

用Java反射來處理數組有時候是技巧性很強的。特別是如果你需要獲取一個給定類型的數組的Class對象,像int[ ]等。本文將講述怎么用Java反射來創建數組和獲取數組的Class對象。下面是所涵蓋的主題列表:java.lang.reflect.ArrayCreating ArraysAccessing Ar…

定時執行java程序_如何讓Java程序定時運行

由于項目開發的需要,必須實現讓一個Java程序定時運行。比如,我的項目中,有一個網絡蜘蛛,需要從互聯網上抓取數據,與其配合,有另一個程序來對新抓取的頁面進行索引的創建,由于數據源更新頻率不高…

java遞歸實現排序_快速排序算法原理及java遞歸實現

快速排序 對冒泡排序的一種改進,若初始記錄序列按關鍵字有序或基本有序,蛻化為冒泡排序。使用的是遞歸原理,在所有同數量級O(n longn) 的排序方法中,其平均性能最好。就平均時間而言,是目前被認為最好的一種內部排序方…

java 泛型 .net_Java泛型

標簽:上一篇博文java8函數式編程--收集器collector:(http://my.oschina.net/joshuashaw/blog/487322)講得比較隨性,并沒有把源碼一句一句拿出來分析,后來發現groupingBy方法最后有一個if-else分支用來返回不同類型的collector&…

卡法電子商務 java_javacard DES算法API使用示例

********** 2017年3月15日留言 ——關于java卡Applet系列csdn博文 *************貌似有不少人在看我寫的幾篇關于java卡applet的博文,也收到了一些評論指正博文錯誤,或者私信叫我發代碼文件過去。在此需要說明的是,java卡applet的這幾篇博文…

java http請求原理_淺談Spring Cloud zuul http請求轉發原理

spring cloud 網關,依賴于netflix 下的zuul 組件zuul 的流程是,自定義 了ZuulServletFilter和zuulServlet兩種方式,讓開發者可以去實現,并調用先來看下ZuulServletFilter的實現片段Overridepublic void doFilter(ServletRequest s…

java堆外內存溢出_JVM 案例 - 堆外內存導致的溢出錯誤

案例一個網站為了實現客戶端實時從服務端接收數據,使用了 CometD 1.1.1 作為服務端推送框架,服務器是 Jetty7.1.4,CPU i5,內存 4G,操作系統 32位Windows。服務端常常拋出內存溢出異常,管理員把堆開到最大(3…

java mail outlook_已啟用Outlook API郵件與郵箱用戶

一個非常微妙的問題,也許是特定的環境 . 我正在嘗試使用Outlook 2010 API從啟用郵件的用戶中識別郵箱用戶 . 我們在Notes to Exchange遷移期間使用Dell Quest遷移工具,它是一個流動的項目 . 仍處于原型階段,因此使用VB宏來最終將在C&#xff…

oracle java存儲過程返回值_java程序調用Oracle 存儲過程 獲取返回值(無返回,非結果集,結果集)...

java程序調用Oracle 存儲過程 獲取返回值(無返回,非結果集,結果集)oracle中procedure是不能有返回值的,要想返回值,就得有輸出參數,同樣要想返回記錄集,可以把游標類型作為輸出參數。下面是詳細情況說明&am…

mysql dump工具升級_MySQL數據庫升級

當前不少系統的數據庫依舊是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有著很大的提升,因此需要升級數據庫。本文通過邏輯方式、物理方式原地升級來介紹MySQL5.6 升級至MySQL5.7的方法,并介紹其使用場景。1. 邏輯方式升級邏輯方式升級…

java int 128 ==_為什么 Java Integer 中“128==128”為false,而”100==100“為true?

這是一個挺有意思的討論話題,讓我們用代碼說話吧!運行下面的代碼:Integer a 128, b 128;System.out.println(a b);Integer c 100, d 100;System.out.println(c d);你會得到:falsetrue基本知識:我們知道,如果兩個引用指向同一個對象&…

mysql課程表學時_Mysql 鞏固提升 (學生表_課程表_成績表_教師表)

方便Mysql 鞏固提升創建表并插入數據:-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS student;CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,sname varchar(32) DEFAULT NULL,s…