NodeJs中資料庫的使用

漫道求索發表於2019-02-16

1.Node.js 連線 MySQL

$ cnpm install mysql

連線mysql:

var mysql      = require(`mysql`);

var connection = mysql.createConnection({
  host     : `localhost`,
  user     : `root`,
  password : `123456`,
  database : `test`
});

connection.connect();
 
connection.query(`SELECT 1 + 1 AS solution`, function (error, results, fields) {
  if (error) throw error;
  console.log(`The solution is: `, results[0].solution);
});

資料庫連線引數說明

引數 描述
host 主機地址 (預設:localhost)

user 使用者名稱

password 密碼

port 埠號 (預設:3306)

database  資料庫名

charset  連線字符集(預設:`UTF8_GENERAL_CI`,注意字符集的字母都要大寫)

localAddress  此IP用於TCP連線(可選)

socketPath  連線到unix域路徑,當使用 host 和 port 時會被忽略

timezone  時區(預設:`local`)

connectTimeout 連線超時(預設:不限制;單位:毫秒)

stringifyObjects 是否序列化物件

typeCast  是否將列值轉化為本地JavaScript型別值 (預設:true)

queryFormat  自定義query語句格式化方法

supportBigNumbers  資料庫支援bigint或decimal型別列時,需要設此option為true (預設:false)bigNumberStrings supportBigNumbers和bigNumberStrings啟用 強制bigint或decimal列以JavaScript字串型別返回(預設:false)

dateStrings  強制timestamp,datetime,data型別以字串型別返回,而不是JavaScript Date型別(預設:false)

debug  開啟除錯(預設:false)

multipleStatements 是否許一個query中有多個MySQL語句 (預設:false)

flags 用於修改連線標誌

ssl  使用ssl引數(與crypto.createCredenitals引數格式一至)或一個包含ssl配置檔名稱的字串,目前只捆綁Amazon RDS的配置檔案

2.Node.js 連線 MongoDB:

MongoDB是一種文件導向資料庫管理系統,由C++撰寫而成。MongoDB 教程。 安裝驅動

$ cnpm install mongodb

增刪改查


要在 MongoDB 中建立一個資料庫,首先我們需要建立一個 MongoClient 物件,然後配置好指定的 URL 和 埠號。
如果資料庫不存在,MongoDB 將建立資料庫並建立連線。

建立連線

var MongoClient = require(`mongodb`).MongoClient;
var url = "mongodb://localhost:27017/mydb";
 
MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  console.log("資料庫已建立!");
  db.close();
});

建立集合

我們可以使用 createCollection() 方法來建立集合: 建立集合

var MongoClient = require(`mongodb`).MongoClient;
var url = `mongodb://localhost:27017/mydb`;
MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    console.log(`資料庫已建立`);
    var dbase = db.db("mydb");
    dbase.createCollection(`runoob`, function (err, res) {
        if (err) throw err;
        console.log("建立集合!");
        db.close();
    });
});

資料庫操作( CURD )

與 MySQL 不同的是 MongoDB 會自動建立資料庫和集合,所以使用前我們不需要手動去建立。 插入資料 以下例項我們連線資料庫

runoob 的 site 表,並插入兩條資料:

插入資料

var MongoClient = require(`mongodb`).MongoClient;
var DB_CONN_STR = `mongodb://localhost:27017/runoob`; # 資料庫為 runoob
 
var insertData = function(db, callback) {  
    //連線到表 site
    var collection = db.collection(`site`);
    //插入資料
    var data = [{"name":"菜鳥教程","url":"www.runoob.com"},{"name":"菜鳥工具","url":"c.runoob.com"}];
    collection.insert(data, function(err, result) { 
        if(err)
        {
            console.log(`Error:`+ err);
            return;
        }     
        callback(result);
    });
}
 
MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("連線成功!");
    insertData(db, function(result) {
        console.log(result);
        db.close();
    });
});

執行以下命令輸出就結果為:

$ node test.js //連線成功!

{ result: { ok: 1, n: 2 },
  ops: 
   [ { name: `菜鳥教程`,
       url: `www.runoob.com`,
       _id: 58c25e13a08de70d3b9d4116 },
     { name: `菜鳥工具`,
       url: `c.runoob.com`,
       _id: 58c25e13a08de70d3b9d4117 } ],
  insertedCount: 2,
  insertedIds: [58c25e13a08de70d3b9d4116, 58c25e13a08de70d3b9d4117]
}

從輸出結果來看,資料已插入成功。

我們也可以開啟 MongoDB 的客戶端檢視資料,如:

show dbs

admin   0.000GB
local   0.000GB
runoob  0.000GB          # 自動建立了 runoob 資料庫

show tables
site                     # 自動建立了 site 集合(資料表)

db.site.find()         # 檢視集合中的資料
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鳥教程", "url" : "www.runoob.com" }
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鳥工具", "url" : "c.runoob.com" }

查詢資料

以下例項檢索 name 為 “菜鳥教程” 的例項:

var MongoClient = require(`mongodb`).MongoClient;
var DB_CONN_STR = `mongodb://localhost:27017/runoob`;    
 
var selectData = function(db, callback) {  
  //連線到表  
  var collection = db.collection(`site`);
  //查詢資料
  var whereStr = {"name":`菜鳥教程`};
  collection.find(whereStr).toArray(function(err, result) {
    if(err)
    {
      console.log(`Error:`+ err);
      return;
    }     
    callback(result);
  });
}
 
MongoClient.connect(DB_CONN_STR, function(err, db) {
  console.log("連線成功!");
  selectData(db, function(result) {
    console.log(result);
    db.close();
  });
});

執行以下命令輸出就結果為:

連線成功!

[ { _id: 58c25f300cd56e0d7ddfc0c8,
    name: `菜鳥教程`,
    url: `www.runoob.com` } ]

更新資料

我們也可以對資料庫的資料進行修改,以下例項將 name 為 “菜鳥教程” 的 url 改為 https://www.runoob.com

var MongoClient = require(`mongodb`).MongoClient;
var DB_CONN_STR = `mongodb://localhost:27017/runoob`;    
 
var updateData = function(db, callback) {  
    //連線到表  
    var collection = db.collection(`site`);
    //更新資料
    var whereStr = {"name":`菜鳥教程`};
    var updateStr = {$set: { "url" : "https://www.runoob.com" }};
    collection.update(whereStr,updateStr, function(err, result) {
        if(err)
        {
            console.log(`Error:`+ err);
            return;
        }     
        callback(result);
    });
}
 
MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("連線成功!");
    updateData(db, function(result) {
        console.log(result);
        db.close();
    });
});

執行成功後,進入 mongo 管理工具檢視資料已修改:

db.site.find()
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鳥教程", "url" : "https://www.runoob.com" }
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鳥工具", "url" : "c.runoob.com" }

刪除資料

以下例項將 name 為 “菜鳥工具” 的資料刪除 :

var MongoClient = require(`mongodb`).MongoClient;
var DB_CONN_STR = `mongodb://localhost:27017/runoob`;    
 
var delData = function(db, callback) {  
  //連線到表  
  var collection = db.collection(`site`);
  //刪除資料
  var whereStr = {"name":`菜鳥工具`};
  collection.remove(whereStr, function(err, result) {
    if(err)
    {
      console.log(`Error:`+ err);
      return;
    }     
    callback(result);
  });
}
 
MongoClient.connect(DB_CONN_STR, function(err, db) {
  console.log("連線成功!");
  delData(db, function(result) {
    console.log(result);
    db.close();
  });
});

執行成功後,進入 mongo 管理工具檢視資料已刪除:

db.site.find()
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鳥教程", "url" : "https://www.runoob.com" }

相關文章