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 中執行以下操作
- 管理連線池 - 你可以在此處指定 Node.js 應維護和儲存的 MySQL 資料庫連線數。
- 建立並關閉與資料庫的連線。在任何一種情況下,你都可以提供一個回撥函式,只要執行
create
和close
連線方法,就可以呼叫該函式。 - 可以執行查詢以從各個資料庫獲取資料以檢索資料。
- 使用這些模組也可以實現諸如插入資料,刪除和更新資料之類的資料操作。
接下來我們將瞭解如何在 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();
});
程式碼說明:
- 第一步是包括通過 require 函式完成的 mongoose 模組。一旦該模組到位,我們就可以使用此模組中可用的必要功能來建立與資料庫的連線。
- 接下來,我們將連線字串指定給資料庫。在連線字串中有 3 個鍵值傳遞。
- 第一個是
mongodb
,它指定我們連線到 MongoDB 資料庫。 - 接下來是
localhost
,這意味著我們將連線到本地計算機上的資料庫。 - 接下來是
EmployeeDB
,它是 MongoDB 資料庫中定義的資料庫的名稱。
- 第一個是
- 下一步是實際連線到我們的資料庫。
connect
函式接收我們的 URL 並具有指定回撥函式的功能。當連線開啟到資料庫時將呼叫它。這使我們有機會知道資料庫連線是否成功。 - 在函式中,我們將字串
Connection established
寫入控制檯,以指示已成功建立連線。 - 最後,我們使用
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);
});
});
程式碼說明:
- 在第一步中,我們建立一個遊標(遊標是一個指標,用於指向從資料庫中獲取的各種記錄。然後使用遊標迭代資料庫中的不同記錄。這裡我們是定義一個名為 cursor 的變數名,它將用於儲存指向從資料庫獲取的記錄的指標。)它指向從 MongoDb 集合中獲取的記錄。我們還可以指定從中獲取記錄的集合
Employee.find()
函式用於指定我們要從 MongoDB 集合中檢索所有文件。 - 我們現在正在遍歷遊標,對於遊標中的每個文件,我們將執行一個函式。
- 我們的功能就是將每個文件的內容列印到控制檯。
**注意: -**也可以從資料庫中獲取特定記錄。這可以通過在 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"
});
});
程式碼說明:
- 這裡我們使用 MongoDB 庫中的 insertOne 方法將文件插入 Employee 集合中。
- 我們正在指定需要插入 Employee 集合的文件的詳細資訊。
如果現在檢查 MongoDB 資料庫的內容,你將在 Employee 集合中找到 Employeeid 為 4 且 EmployeeName 為 NewEmployee
的記錄。
注意: 控制檯不會顯示任何輸出,因為記錄正在資料庫中插入,此處無法顯示輸出。
要檢查資料是否已正確插入資料庫,你需要在 MongoDB 中執行以下命令
- 使用 EmployeeDB
- 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" }
});
});
程式碼說明:
- 這裡我們使用 MongoDB 庫中的
updateOne
方法,該方法用於更新 MongoDB 集合中的文件。 - 我們正在指定需要更新哪個文件的搜尋條件。在我們的例子中,我們希望找到 EmployeeName 為
NewEmployee
的文件。 - 然後,我們要將文件的 EmployeeName 的值從
NewEmployee
設定為Mohan
。
如果現在檢查 MongoDB 資料庫的內容,你將在 Employee 集合中找到 Employeeid 為 4 且 EmployeeName 為 Mohan
的記錄。
要檢查資料庫中的資料是否已正確更新,你需要在 MongoDB 中執行以下命令
- 使用 EmployeeDB
- 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"
}
);
});
程式碼說明:
- 這裡我們使用 MongoDB 庫中的
deleteOne
方法,該方法用於刪除 MongoDB 集合中的文件。 - 我們正在指定需要刪除哪個文件的搜尋條件。在我們的例子中,我們想要找到 EmployeeName 為
Mohan
的文件並刪除該文件。
如果現在檢查 MongoDB 資料庫的內容,你將從 Employee 集合中找到 Employeeid 為 4 且 EmployeeName 為 Mohan
的記錄。
要檢查資料庫中的資料是否已正確更新,你需要在 MongoDB 中執行以下命令
- 使用 EmployeeDB
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 如何協同工作以提供與後端資料庫互動的應用程式總是很好的。
讓我們看一個如何將 express
和 MongoDB
結合使用的簡單示例。我們的示例將在 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="";
程式碼說明:
- 我們正在定義我們的
express
庫,它將在我們的應用程式中使用。 - 我們正在定義我們的
express
庫,它將在我們的應用程式中用於連線到 MongoDB 資料庫。 這裡我們定義要連線的資料庫的 URL。 - 最後,我們定義了一個字串,用於儲存我們的員工 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>";
}});
程式碼說明:
- 我們正在建立一個名為
Employeeid
的應用程式路徑。因此,每當有人瀏覽我們應用程式的http://localhost:3000/Employeeid
時,將執行為此路由定義的程式碼段。 - 在這裡,我們通過
db.collection('Employee').find()
命令獲取Employee
集合中的所有記錄。然後我們將此集合分配給名為 cursor 的變數。使用此遊標變數,我們將能夠瀏覽集合的所有記錄。 - 我們現在使用
cursor.each()
函式來瀏覽集合的所有記錄。對於每條記錄,我們將定義一個程式碼片段,說明訪問每條記錄時要執行的操作。 - 最後,我們看到如果返回的記錄不為 null,那麼我們通過命令
item.Employeeid
獲取員工。其餘的程式碼只是構建一個正確的 HTML 程式碼,這將允許我們的結果在瀏覽器中正確顯示。
步驟 3: 在此步驟中,我們將輸出傳送到網頁,並使我們的應用程式偵聽特定埠。
res.send(str);
}); });
var server=app.listen(3000, function()
{});
程式碼說明:
- 在這裡,我們將在前面步驟中構建的整個內容傳送到我們的網頁。
res
引數允許我們將內容作為回覆傳送到我們的網頁。 - 我們正在使整個 Node.js 應用程式偵聽埠 3000。
輸出:
從輸出,它清楚地顯示了 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 驅動程式返回的資料,並相應地在網頁中向使用者顯示資料。