Node.js MongoDB

大多數現代 Web 應用程式在後端都有某種資料儲存系統來儲存資料。例如,如果你採用 Web 購物應用程式的情況,則資料(例如專案的價格或特定型別的專案數)將儲存在資料庫中。

Node.js 框架能夠處理大多數現代 Web 應用程式通常需要的資料庫。Node.js 可以使用關係(例如 Oracle 和 MS SQL Server)和非關聯式資料庫(例如 MongoDB)。在本教程中,我們將瞭解如何在 Node.js 應用程式中使用資料庫。

在本教程中,你將學習 -

  • Node.js 和 NoSQL 資料庫

  • 使用 MongoDB 和 Node.js

  • 如何使用 MongoDB 構建節點表達應用程式來儲存和提供內容

Node.js 和 NoSQL 資料庫

多年來,諸如 MongoDB和 MySQL 之類的 NoSQL 資料庫作為用於儲存資料的資料庫變得非常流行。這些資料庫儲存任何型別內容的能力,特別是任何種類的格式,都使這些資料庫如此著名。

Node.js 能夠將 MySQL 和 MongoDB 作為資料庫使用。要使用這些資料庫中的任何一個,你需要使用 Node 包管理器下載並使用所需的模組。

對於 MySQL,所需的模組稱為 mysql,對於使用 MongoDB,要安裝的所需模組是 Mongoose

使用這些模組,你可以在 Node.js 中執行以下操作

  1. 管理連線池 - 你可以在此處指定 Node.js 應維護和儲存的 MySQL 資料庫連線數。
  2. 建立並關閉與資料庫的連線。在任何一種情況下,你都可以提供一個回撥函式,只要執行 createclose 連線方法,就可以呼叫該函式。
  3. 可以執行查詢以從各個資料庫獲取資料以檢索資料。
  4. 使用這些模組也可以實現諸如插入資料,刪除和更新資料之類的資料操作。

接下來我們將瞭解如何在 Node.js 中使用 MongoDB 資料庫。

使用 MongoDB 和 Node.js

正如前面的主題中所討論的,MongoDB 是與 Node.js 一起使用的最流行的資料庫之一。

在本章中,我們將看到

我們如何與 MongoDB 資料庫建立連線

我們如何執行從資料庫讀取資料以及在 MongoDB 資料庫中插入,刪除和更新記錄的正常操作。

本章中我們假設我們有以下 MongoDB 資料。

資料庫名稱:EmployeeDB

集合名稱:Employee

Documents
{
    {Employeeid : 1, Employee Name : Tastones},
    {Employeeid : 2, Employee Name : Joe},
    {Employeeid : 3, Employee Name : Martin},
}

安裝 NPM 模組

要從 Node 應用程式中訪問 Mongo,需要驅動程式。有許多 Mongo 驅動程式可用,但 MongoDB 是最受歡迎的。要安裝 MongoDB 模組,請執行以下命令

npm install mongodb

建立和關閉與 MongoDB 資料庫的連線

以下程式碼片段顯示如何建立和關閉與 MongoDB 資料庫的連線。

var Mongoclient = require('mongodb').Mongoclient;
var url = 'mongodb://localhost/EmployeeDB';
Mongoclient.connect(url, function(err, db) {
	console.log("Connected");
	db.close();
});

程式碼說明:

  1. 第一步是包括通過 require 函式完成的 mongoose 模組。一旦該模組到位,我們就可以使用此模組中可用的必要功能來建立與資料庫的連線。
  2. 接下來,我們將連線字串指定給資料庫。在連線字串中有 3 個鍵值傳遞。
    • 第一個是 mongodb,它指定我們連線到 MongoDB 資料庫。
    • 接下來是 localhost,這意味著我們將連線到本地計算機上的資料庫。
    • 接下來是 EmployeeDB,它是 MongoDB 資料庫中定義的資料庫的名稱。
  3. 下一步是實際連線到我們的資料庫。 connect 函式接收我們的 URL 並具有指定回撥函式的功能。當連線開啟到資料庫時將呼叫它。這使我們有機會知道資料庫連線是否成功。
  4. 在函式中,我們將字串 Connection established 寫入控制檯,以指示已成功建立連線。
  5. 最後,我們使用 db.close 語句關閉連線。 如果上面的程式碼正確執行,字串 Connected 將被寫入控制檯。

查詢 MongoDB 資料庫中的資料

使用 MongoDB 驅動程式,我們也可以從 MongoDB 資料庫中獲取資料。

下面的部分將展示我們如何使用驅動程式從 Employee 集合中獲取所有文件(這是 MongoDB 資料庫中包含所有員工相關文件的集合。每個文件都有一個物件 ID,員工姓名和員工 ID 在 EmployeeDB 資料庫中定義文件的值。

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
		var cursor = db.collection('Employee').find();
		cursor.each(function(err, doc) {
			console.log(doc);
		});
}); 

程式碼說明:

  1. 在第一步中,我們建立一個遊標(遊標是一個指標,用於指向從資料庫中獲取的各種記錄。然後使用遊標迭代資料庫中的不同記錄。這裡我們是定義一個名為 cursor 的變數名,它將用於儲存指向從資料庫獲取的記錄的指標。)它指向從 MongoDb 集合中獲取的記錄。我們還可以指定從中獲取記錄的集合 Employee.find() 函式用於指定我們要從 MongoDB 集合中檢索所有文件。
  2. 我們現在正在遍歷遊標,對於遊標中的每個文件,我們將執行一個函式。
  3. 我們的功能就是將每個文件的內容列印到控制檯。

**注意: -**也可以從資料庫中獲取特定記錄。這可以通過在 find() 函式中指定搜尋條件來完成。例如,假設你只是想獲取員工姓名為 Tastones 的記錄,那麼此語句可以寫成如下 var cursor=db.collection('Employee').find()

如果上述程式碼成功執行,則控制檯中將顯示以下輸出。

{id: 567adf6b341785002 88e69ca, Employeeid: 1, EmployeeName: 'Guru99' }
{id: 567adf7934178500288e69cb, Employeeid: 2, EmployeeName: 'Joe' }
{id: 567adf8234178500288e69cc, Employeeid: 3, EmployeeName: 'Martin' }

從輸出中,你將能夠清楚地看到收集集合中的所有文件。這可以通過使用 MongoDB 連線(db)的 find() 方法並使用遊標迭代所有文件來實現。

在集合中插入文件

可以使用 MongoDB 庫提供的 insertOne 方法將文件插入集合中。下面的程式碼片段顯示了我們如何將文件插入到 MongoDB 集合中。

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

var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {
    db.collection('Employee').insertOne({
        Employeeid: 4,
        EmployeeName: "NewEmployee"
    });
}); 

程式碼說明:

  1. 這裡我們使用 MongoDB 庫中的 insertOne 方法將文件插入 Employee 集合中。
  2. 我們正在指定需要插入 Employee 集合的文件的詳細資訊。

如果現在檢查 MongoDB 資料庫的內容,你將在 Employee 集合中找到 Employeeid 為 4 且 EmployeeName 為 NewEmployee 的記錄。

注意: 控制檯不會顯示任何輸出,因為記錄正在資料庫中插入,此處無法顯示輸出。

要檢查資料是否已正確插入資料庫,你需要在 MongoDB 中執行以下命令

  1. 使用 EmployeeDB
  2. db.Employee.find({Employeeid:4})

第一個語句確保你連線到 EmployeeDb 資料庫。第二個語句搜尋員工 ID 為 4 的記錄。

更新集合中的文件

可以使用 MongoDB 庫提供的 updateOne 方法在集合中更新文件。以下程式碼段顯示瞭如何更新 MongoDB 集合中的文件。

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {
    db.collection('Employee').updateOne({
        "EmployeeName": "NewEmployee"
    }, 
	
	{
        $set: { "EmployeeName": "Mohan" }
    });

}); 

程式碼說明:

  1. 這裡我們使用 MongoDB 庫中的 updateOne 方法,該方法用於更新 MongoDB 集合中的文件。
  2. 我們正在指定需要更新哪個文件的搜尋條件。在我們的例子中,我們希望找到 EmployeeName 為 NewEmployee 的文件。
  3. 然後,我們要將文件的 EmployeeName 的值從 NewEmployee 設定為 Mohan

如果現在檢查 MongoDB 資料庫的內容,你將在 Employee 集合中找到 Employeeid 為 4 且 EmployeeName 為 Mohan 的記錄。

要檢查資料庫中的資料是否已正確更新,你需要在 MongoDB 中執行以下命令

  1. 使用 EmployeeDB
  2. db.Employee.find({Employeeid:4})

第一個語句確保你連線到 EmployeeDb 資料庫。第二個語句搜尋員工 ID 為 4 的記錄。

刪除集合中的文件

可以使用 MongoDB 庫提供的 deleteOne 方法在集合中刪除文件。以下程式碼段顯示瞭如何刪除 MongoDB 集合中的文件。

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {
    db.collection('Employee').deleteOne(
        {
            "EmployeeName": "Mohan"
        }
    );

}); 

程式碼說明:

  1. 這裡我們使用 MongoDB 庫中的 deleteOne 方法,該方法用於刪除 MongoDB 集合中的文件。
  2. 我們正在指定需要刪除哪個文件的搜尋條件。在我們的例子中,我們想要找到 EmployeeName 為 Mohan 的文件並刪除該文件。

如果現在檢查 MongoDB 資料庫的內容,你將從 Employee 集合中找到 Employeeid 為 4 且 EmployeeName 為 Mohan 的記錄。

要檢查資料庫中的資料是否已正確更新,你需要在 MongoDB 中執行以下命令

  1. 使用 EmployeeDB
  2. db.Employee.find()

第一個語句確保你連線到 EmployeeDb 資料庫。第二個語句搜尋並顯示 employee 集合中的所有記錄。你可以在此處檢視記錄是否已刪除。

##如何使用 MongoDB 構建節點表達應用程式來儲存和提供內容

使用 express 和 MongoDB 組合構建應用程式現在非常普遍。

使用[JavaScript](/ interactive-javascript-tutorials.html)基於 Web 的應用程式時,通常會出現術語 MEAN 堆疊。

  • 術語 MEAN 堆疊是指用於開發 Web 應用程式的基於 JavaScript 的技術的集合。
  • MEAN 是 MongoDB,ExpressJS,[AngularJS](/ angularjs-tutorial.html)和 Node.js 的首字母縮寫。

因此,瞭解 Node.js 和 MongoDB 如何協同工作以提供與後端資料庫互動的應用程式總是很好的。

讓我們看一個如何將 expressMongoDB 結合使用的簡單示例。我們的示例將在 MongoDB EmployeeDB 資料庫中使用相同的 Employee 集合。

我們現在將 Express 用於在使用者請求時在我們的網頁上顯示資料。當我們的應用程式在 Node.js 上執行時,可能需要瀏覽到 URL http://localhost:3000/Employeeid

啟動頁面後,將顯示 Employee 集合中的所有員工 ID。因此,讓我們在部分中看到程式碼片段,這將允許我們實現此目的。

步驟 1: 定義需要在我們的應用程式中使用的所有庫,在我們的例子中是 MongoDB 和 express 庫。

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

var url = 'mongodb://localhost/EmployeeDB';

var str="";

程式碼說明:

  1. 我們正在定義我們的 express 庫,它將在我們的應用程式中使用。
  2. 我們正在定義我們的 express 庫,它將在我們的應用程式中用於連線到 MongoDB 資料庫。 這裡我們定義要連線的資料庫的 URL。
  3. 最後,我們定義了一個字串,用於儲存我們的員工 ID 集合,稍後需要在瀏覽器中顯示。

步驟 2: 在此步驟中,我們現在將獲取 員工 集合中的所有記錄並相應地使用它們。

app.route('/Employeeid').get(function(reg, res)
{
	MongoClient.connect(url, function (err, db) {
		var cursor =db.collection('Employee').find();
		cursor.each(function (err, item) {
			if(item != null) { 
				str = str + "    Employee id  
					+ item. Employeeid + "</br>"; 
		}});

程式碼說明:

  1. 我們正在建立一個名為 Employeeid 的應用程式路徑。因此,每當有人瀏覽我們應用程式的 http://localhost:3000/Employeeid 時,將執行為此路由定義的程式碼段。
  2. 在這裡,我們通過 db.collection('Employee').find() 命令獲取 Employee 集合中的所有記錄。然後我們將此集合分配給名為 cursor 的變數。使用此遊標變數,我們將能夠瀏覽集合的所有記錄。
  3. 我們現在使用 cursor.each() 函式來瀏覽集合的所有記錄。對於每條記錄,我們將定義一個程式碼片段,說明訪問每條記錄時要執行的操作。
  4. 最後,我們看到如果返回的記錄不為 null,那麼我們通過命令 item.Employeeid 獲取員工。其餘的程式碼只是構建一個正確的 HTML 程式碼,這將允許我們的結果在瀏覽器中正確顯示。

步驟 3: 在此步驟中,我們將輸出傳送到網頁,並使我們的應用程式偵聽特定埠。

	res.send(str);
	}); });
	
var server=app.listen(3000, function()
{});

程式碼說明:

  1. 在這裡,我們將在前面步驟中構建的整個內容傳送到我們的網頁。 res 引數允許我們將內容作為回覆傳送到我們的網頁。
  2. 我們正在使整個 Node.js 應用程式偵聽埠 3000。

輸出:

Node.js MongoDB express

從輸出,它清楚地顯示了 Employee 集合中的所有 employeeid 都被檢索到了。這是因為我們使用 MongoDB 驅動程式連線到資料庫並檢索所有 Employee 記錄,然後使用 express 來顯示記錄。

以下是供你參考的程式碼

var express = require('express');
var app = `express()`;
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
var str = "";

app.route('/Employeeid').get(function(req, res)
    {
        MongoClient.connect(url, function(err, db) {
            var cursor = db.collection('Employee')`.find()`;
            //noinspection JSDeprecatedSymbols
            cursor.each(function(err, item) {
                if (item != null) {
                    str = str + "    Employee id  " + item.Employeeid + "</br>";
                }
            });

            res.send(str);

            db.close();
        });
    });

var server = app.listen(3000, `function()` {}); 

注意: cursor.each 可能會根據 MongoDB 驅動程式的版本而棄用。你可以在 cursor.each 之前附加// noinspection JSDeprecatedSymbols 來規避問題。或者,你可以使用 forEach。下面是使用 forEach 的示例程式碼

var express = require('express');
var app = `express()`;
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
var str = "";

app.route('/Employeeid').get(function(req, res) {
   MongoClient.connect(url, function(err, db) {
       var collection = db.collection('Employee');
       var cursor = collection.find({});
       str = "";

       cursor.forEach(function(item) {
           if (item != null) {
                   str = str + "    Employee id  " + item.Employeeid + "</br>";
           }
       }, function(err) {
           res.send(str);
           db.close();
          }
       );
   });
});

var server = app.listen(8080, `function()` {});

概要

  • Node.js 與 NoSQL 資料庫結合使用,構建了許多現代 Web 應用程式。一些常用的資料庫是 MySQL 和 MongoDB。
  • 用於處理 MongoDB 資料庫的常用模組之一是名為 MongoDB 的模組。該模組通過 Node 包管理器安裝。
  • 使用 MongoDB 模組,可以查詢集合中的記錄並執行正常的更新,刪除和插入操作。
  • 最後,現代實踐之一是使用 express 框架和 MongoDB 來提供現代應用程式。Express 框架可以利用 MongoDB 驅動程式返回的資料,並相應地在網頁中向使用者顯示資料。