安裝
安裝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();