Node.js MongoDB Hướng dẫn có ví dụ
Hầu hết tất cả các ứng dụng web hiện đại đều có một số loại hệ thống lưu trữ dữ liệu ở phần phụ trợ. Ví dụ: nếu bạn lấy trường hợp của một ứng dụng mua sắm trên web, dữ liệu như giá của một mặt hàng sẽ được lưu trữ trong cơ sở dữ liệu.
Khung công tác Node js có thể hoạt động với cơ sở dữ liệu có cả quan hệ (chẳng hạn như Oracle và MS SQL Server) và cơ sở dữ liệu phi quan hệ (chẳng hạn như MongoDB). Trong hướng dẫn này, chúng ta sẽ xem cách chúng ta có thể sử dụng cơ sở dữ liệu từ bên trong các ứng dụng Node js.
Cơ sở dữ liệu Node.js và NoSQL
Trong những năm qua, cơ sở dữ liệu NoSQL như MongoDB va cho MySQL đã trở nên khá phổ biến như cơ sở dữ liệu để lưu trữ dữ liệu. Khả năng lưu trữ bất kỳ loại nội dung nào và đặc biệt ở bất kỳ loại định dạng nào của các cơ sở dữ liệu này là điều khiến các cơ sở dữ liệu này trở nên nổi tiếng.
Node.js có khả năng hoạt động với cả hai MySQL và MongoDB như cơ sở dữ liệu. Để sử dụng một trong hai cơ sở dữ liệu này, bạn cần tải xuống và sử dụng các mô-đun cần thiết bằng trình quản lý gói Node.
Trong MySQL, mô-đun cần thiết có tên là “mysql” và để sử dụng MongoDB mô-đun bắt buộc phải cài đặt là “Mongoose”.
Với các mô-đun này, bạn có thể thực hiện các hoạt động sau trong Node.js
- Quản lý nhóm kết nối – Đây là nơi bạn có thể chỉ định số lượng MySQL các kết nối cơ sở dữ liệu cần được Node.js duy trì và lưu lại.
- Tạo và đóng kết nối tới cơ sở dữ liệu. Trong cả hai trường hợp, bạn có thể cung cấp chức năng gọi lại có thể được gọi bất cứ khi nào phương thức kết nối “tạo” và “đóng” được thực thi.
- Các truy vấn có thể được thực hiện để lấy dữ liệu từ cơ sở dữ liệu tương ứng để lấy dữ liệu.
- Thao tác dữ liệu, chẳng hạn như chèn dữ liệu, xóa và cập nhật dữ liệu cũng có thể được thực hiện bằng các mô-đun này.
Đối với các chủ đề còn lại, chúng ta sẽ xem xét cách chúng ta có thể làm việc với MongoDB cơ sở dữ liệu bên trong Node.js.
Sử dụng MongoDB và Node.js
Như đã thảo luận ở chủ đề trước, MongoDB là một trong những cơ sở dữ liệu phổ biến nhất được sử dụng cùng với Node.js.
Trong chương này, chúng ta sẽ thấy
Làm thế nào chúng ta có thể thiết lập kết nối với một MongoDB cơ sở dữ liệu
Làm thế nào chúng ta có thể thực hiện các hoạt động bình thường trong việc đọc dữ liệu từ cơ sở dữ liệu cũng như chèn, xóa và cập nhật các bản ghi trong một cơ sở dữ liệu? MongoDB cơ sở dữ liệu.
Với mục đích của chương này, hãy giả sử rằng chúng ta có những điều dưới đây MongoDB dữ liệu tại chỗ.
Tên cơ sở dữ liệu: Nhân viên DB
Tên bộ sưu tập: Nhân viên
Documents { {Employeeid : 1, Employee Name : Guru99}, {Employeeid : 2, Employee Name : Joe}, {Employeeid : 3, Employee Name : Martin}, }
- Cài đặt mô-đun NPM
Bạn cần có trình điều khiển để truy cập Mongo từ bên trong ứng dụng Node. Có sẵn một số trình điều khiển Mongo, nhưng MongoDB là một trong những phổ biến nhất. Để cài đặt MongoDB mô-đun, chạy lệnh dưới đây
npm cài đặt mongodb
- Tạo và đóng kết nối tới một MongoDB cơ sở dữ liệu. Đoạn mã dưới đây cho thấy cách tạo và đóng kết nối tới một MongoDB cơ sở dữ liệu.
Giải thích mã:
- Bước đầu tiên là thêm mô-đun mongoose, được thực hiện thông qua hàm require. Khi mô-đun này được cài đặt, chúng ta có thể sử dụng các chức năng cần thiết có sẵn trong mô-đun này để tạo kết nối tới cơ sở dữ liệu.
- Tiếp theo, chúng tôi chỉ định chuỗi kết nối của mình với cơ sở dữ liệu. Trong chuỗi kết nối, có 3 giá trị khóa được truyền.
- Đầu tiên là 'mongodb' chỉ rõ rằng chúng ta đang kết nối với cơ sở dữ liệu mongoDB.
- Tiếp theo là 'localhost' có nghĩa là chúng ta đang kết nối với cơ sở dữ liệu trên máy cục bộ.
- Tiếp theo là 'EmployeeDB' là tên của cơ sở dữ liệu được xác định trong MongoDB cơ sở dữ liệu.
- Bước tiếp theo là thực sự kết nối với cơ sở dữ liệu của chúng tôi. Hàm kết nối lấy URL của chúng tôi và có khả năng chỉ định chức năng gọi lại. Nó sẽ được gọi khi kết nối được mở tới cơ sở dữ liệu. Điều này cho chúng ta cơ hội để biết kết nối cơ sở dữ liệu có thành công hay không.
- Trong hàm, chúng ta đang viết chuỗi “Đã thiết lập kết nối” vào bảng điều khiển để cho biết rằng một kết nối thành công đã được tạo.
- Cuối cùng, chúng ta đóng kết nối bằng câu lệnh db.close.
Nếu đoạn mã trên được thực thi đúng cách, chuỗi “Đã kết nối” sẽ được ghi vào bảng điều khiển như hiển thị bên dưới.
- Truy vấn dữ liệu trong một MongoDB cơ sở dữ liệu - Sử dụng MongoDB trình điều khiển, chúng tôi cũng có thể lấy dữ liệu từ MongoDB cơ sở dữ liệu. Phần bên dưới sẽ chỉ ra cách chúng ta có thể sử dụng trình điều khiển để tìm nạp tất cả tài liệu từ bộ sưu tập Nhân viên của mình trong cơ sở dữ liệu StaffDB của chúng tôi. Đây là bộ sưu tập của chúng tôi MongoDB cơ sở dữ liệu chứa tất cả các tài liệu liên quan đến nhân viên. Mỗi tài liệu có một id đối tượng, tên nhân viên và id nhân viên để xác định các giá trị của tài liệu.
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); }); });
Giải thích mã:
- Trong bước đầu tiên, chúng ta tạo một con trỏ (Con trỏ là một con trỏ được sử dụng để trỏ đến các bản ghi khác nhau được lấy từ cơ sở dữ liệu. Sau đó, con trỏ được sử dụng để lặp qua các bản ghi khác nhau trong cơ sở dữ liệu. Ở đây, chúng ta định nghĩa một tên biến có tên là cursor sẽ được sử dụng để lưu trữ con trỏ đến các bản ghi được lấy từ cơ sở dữ liệu. ) trỏ đến các bản ghi được lấy từ bộ sưu tập MongoDb. Chúng ta cũng có tiện ích chỉ định bộ sưu tập 'Nhân viên' để lấy các bản ghi. Hàm find() được sử dụng để chỉ định rằng chúng ta muốn lấy tất cả các tài liệu từ MongoDB bộ sưu tập.
- Bây giờ chúng ta đang lặp qua con trỏ và với mỗi tài liệu trong con trỏ, chúng ta sẽ thực thi một hàm.
- Chức năng của chúng tôi chỉ đơn giản là in nội dung của từng tài liệu lên bảng điều khiển.
Chú thích: - Cũng có thể lấy một bản ghi cụ thể từ cơ sở dữ liệu. Điều này có thể được thực hiện bằng cách chỉ định điều kiện tìm kiếm trong hàm find(). Ví dụ: giả sử nếu bạn chỉ muốn tìm nạp bản ghi có tên nhân viên là Guru99 thì câu lệnh này có thể được viết như sau
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
Nếu đoạn mã trên được thực thi thành công, kết quả sau sẽ được hiển thị trong bảng điều khiển của bạn.
Đầu ra:
Từ đầu ra,
- Bạn sẽ có thể thấy rõ ràng rằng tất cả các tài liệu từ bộ sưu tập đều được truy xuất. Điều này có thể thực hiện được bằng cách sử dụng phương thức find() của kết nối mongoDB (db) và lặp qua tất cả các tài liệu bằng con trỏ.
- Chèn tài liệu vào bộ sưu tập – Tài liệu có thể được chèn vào bộ sưu tập bằng phương thức InsertOne được cung cấp bởi MongoDB thư viện. Đoạn mã bên dưới cho thấy cách chúng ta có thể chèn một tài liệu vào bộ sưu tập 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" }); });
Giải thích mã:
- Ở đây chúng tôi đang sử dụng phương thức InsertOne từ MongoDB thư viện để chèn tài liệu vào bộ sưu tập Nhân viên.
- Chúng tôi đang chỉ định chi tiết tài liệu cần chèn vào bộ sưu tập Nhân viên.
Nếu bây giờ bạn kiểm tra nội dung của MongoDB cơ sở dữ liệu, bạn sẽ tìm thấy bản ghi có ID nhân viên là 4 và Tên nhân viên là “Nhân viên mới” được chèn vào bộ sưu tập Nhân viên.
Lưu ý: Bảng điều khiển sẽ không hiển thị bất kỳ đầu ra nào vì bản ghi đang được chèn vào cơ sở dữ liệu và không có đầu ra nào có thể được hiển thị ở đây.
Để kiểm tra xem dữ liệu đã được chèn đúng vào cơ sở dữ liệu chưa, bạn cần thực hiện các lệnh sau trong MongoDB
- Sử dụng cơ sở dữ liệu nhân viên
- db.Employee.find({Employeeid :4 })
Câu lệnh đầu tiên đảm bảo rằng bạn được kết nối với cơ sở dữ liệu StaffDb. Câu lệnh thứ hai tìm kiếm bản ghi có id nhân viên là 4.
- Cập nhật tài liệu trong bộ sưu tập – Tài liệu có thể được cập nhật trong bộ sưu tập bằng phương thức updateOne do MongoDB thư viện. Đoạn mã dưới đây cho thấy cách cập nhật tài liệu trong bộ sưu tập 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" } }); });
Giải thích mã:
- Ở đây chúng tôi đang sử dụng phương pháp “updateOne” từ MongoDB thư viện, được sử dụng để cập nhật tài liệu trong bộ sưu tập mongoDB.
- Chúng tôi đang chỉ định tiêu chí tìm kiếm tài liệu nào cần được cập nhật. Trong trường hợp của chúng tôi, chúng tôi muốn tìm tài liệu có Tên nhân viên là “NewEmployee”.
- Sau đó, chúng tôi muốn đặt giá trị của Tên nhân viên của tài liệu từ “NewEmployee” thành “Mohan”.
Nếu bây giờ bạn kiểm tra nội dung của MongoDB cơ sở dữ liệu, bạn sẽ tìm thấy bản ghi có ID nhân viên là 4 và Tên nhân viên của “Mohan” được cập nhật trong bộ sưu tập Nhân viên.
Để kiểm tra xem dữ liệu đã được cập nhật đúng cách trong cơ sở dữ liệu hay chưa, bạn cần thực hiện các lệnh sau trong MongoDB
- Sử dụng cơ sở dữ liệu nhân viên
- db.Employee.find({Employeeid :4 })
Câu lệnh đầu tiên đảm bảo rằng bạn được kết nối với cơ sở dữ liệu StaffDb. Câu lệnh thứ hai tìm kiếm bản ghi có id nhân viên là 4.
- Xóa tài liệu trong bộ sưu tập – Tài liệu có thể bị xóa trong bộ sưu tập bằng phương pháp “deleteOne” được cung cấp bởi MongoDB thư viện. Đoạn mã bên dưới cho thấy cách xóa một tài liệu trong bộ sưu tập mongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').deleteOne( { "EmployeeName": "Mohan" } ); });
Giải thích mã:
- Ở đây chúng ta đang sử dụng phương thức “deleteOne” từ MongoDB thư viện, được sử dụng để xóa một tài liệu trong bộ sưu tập mongoDB.
- Chúng tôi đang chỉ định tiêu chí tìm kiếm tài liệu nào cần xóa. Trong trường hợp của chúng tôi, chúng tôi muốn tìm tài liệu có Tên nhân viên là “Mohan” và xóa tài liệu này.
Nếu bây giờ bạn kiểm tra nội dung của MongoDB cơ sở dữ liệu, bạn sẽ tìm thấy bản ghi có Mã nhân viên là 4 và Tên nhân viên của “Mohan” đã bị xóa khỏi bộ sưu tập Nhân viên.
Để kiểm tra xem dữ liệu đã được cập nhật đúng cách trong cơ sở dữ liệu hay chưa, bạn cần thực hiện các lệnh sau trong MongoDB
- Sử dụng cơ sở dữ liệu nhân viên
- db.Employee.find()
Câu lệnh đầu tiên đảm bảo rằng bạn được kết nối với cơ sở dữ liệu StaffDb. Câu lệnh thứ hai tìm kiếm và hiển thị tất cả các bản ghi trong bộ sưu tập nhân viên. Tại đây bạn có thể xem bản ghi đã bị xóa hay chưa.
Cách xây dựng ứng dụng node express với MongoDB để lưu trữ và phục vụ nội dung
Xây dựng một ứng dụng với sự kết hợp của cả sử dụng express và MongoDB là khá phổ biến hiện nay.
Khi làm việc với JavaScript các ứng dụng dựa trên web, ở đây người ta thường gọi thuật ngữ ngăn xếp MEAN.
- Thuật ngữ ngăn xếp MEAN đề cập đến một tập hợp các JavaCông nghệ dựa trên tập lệnh được sử dụng để phát triển các ứng dụng web.
- MEAN là viết tắt của MongoDB, ExpressJS, AngularJS, và Node.js.
Do đó, việc hiểu cách Node.js và MongoDB làm việc cùng nhau để cung cấp các ứng dụng tương tác với cơ sở dữ liệu phụ trợ.
Hãy xem một ví dụ đơn giản về cách chúng ta có thể sử dụng “express” và “MongoDB" cùng nhau. Ví dụ của chúng tôi sẽ sử dụng cùng một bộ sưu tập Nhân viên trong MongoDB Cơ sở dữ liệu DB nhân viên.
Bây giờ chúng tôi sẽ kết hợp Express để hiển thị dữ liệu trên trang web của chúng tôi khi người dùng yêu cầu. Khi ứng dụng của chúng tôi chạy trên Node.js, người ta có thể cần duyệt đến URL http://localhost:3000/Employeeid.
Khi trang được khởi chạy, tất cả id nhân viên trong bộ sưu tập Nhân viên sẽ được hiển thị. Vì vậy, hãy xem đoạn mã trong các phần sẽ cho phép chúng ta đạt được điều này.
Bước 1) Xác định tất cả các thư viện cần được sử dụng trong ứng dụng của chúng tôi, trong trường hợp của chúng tôi là cả hai MongoDB và thư viện tốc hành.
Giải thích mã:
- Chúng tôi đang xác định thư viện 'express' sẽ được sử dụng trong ứng dụng của chúng tôi.
- Chúng tôi đang xác định 'MongoDB' thư viện sẽ được sử dụng trong ứng dụng của chúng tôi để kết nối với MongoDB cơ sở dữ liệu.
- Ở đây chúng tôi đang xác định URL của cơ sở dữ liệu để kết nối.
- Cuối cùng, chúng ta định nghĩa một chuỗi sẽ được sử dụng để lưu trữ bộ sưu tập ID nhân viên cần hiển thị trên trình duyệt sau này.
Bước 2) Trong bước này, chúng ta sẽ lấy tất cả các bản ghi trong bộ sưu tập 'Nhân viên' của mình và làm việc với chúng cho phù hợp.
Giải thích mã:
- Chúng tôi đang tạo một tuyến đường đến ứng dụng của mình có tên là 'Employeeid'. Vì vậy bất cứ khi nào có ai duyệt đến http://localhost:3000/Employeeid của ứng dụng của chúng tôi, đoạn mã được xác định cho tuyến đường này sẽ được thực thi.
- Ở đây, chúng ta đang lấy tất cả các bản ghi trong bộ sưu tập 'Employee' thông qua lệnh db.collection('Employee').find(). Sau đó chúng tôi sẽ gán bộ sưu tập này cho một biến có tên là con trỏ. Sử dụng biến con trỏ này, chúng ta sẽ có thể duyệt qua tất cả các bản ghi của bộ sưu tập.
- Chúng tôi hiện đang sử dụng hàmcursor.each() để điều hướng qua tất cả các bản ghi trong bộ sưu tập của mình. Đối với mỗi bản ghi, chúng tôi sẽ xác định một đoạn mã về những việc cần làm khi mỗi bản ghi được truy cập.
- Cuối cùng, chúng ta thấy rằng nếu bản ghi trả về không rỗng thì chúng ta sẽ lấy nhân viên thông qua lệnh “item.Employeeid”. Phần còn lại của mã chỉ là xây dựng một mã HTML thích hợp cho phép kết quả của chúng tôi được hiển thị chính xác trên trình duyệt.
Bước 3) Trong bước này, chúng tôi sẽ gửi đầu ra của mình tới trang web và làm cho ứng dụng của chúng tôi lắng nghe trên một cổng cụ thể.
Giải thích mã:
- Ở đây chúng tôi đang gửi toàn bộ nội dung đã được xây dựng ở bước trước đó tới trang web của chúng tôi. Tham số 'res' cho phép chúng tôi gửi nội dung đến trang web của mình dưới dạng phản hồi.
- Chúng tôi đang làm cho toàn bộ ứng dụng Node.js của mình hoạt động trên cổng 3000.
Đầu ra:
Từ đầu ra,
- Nó cho thấy rõ ràng rằng tất cả các mã nhân viên trong bộ sưu tập Nhân viên đã được truy xuất. Điều này là do chúng tôi sử dụng MongoDB trình điều khiển để kết nối với cơ sở dữ liệu và truy xuất tất cả các bản ghi Nhân viên, sau đó sử dụng “express” để hiển thị các bản ghi.
Đây là mã để bạn tham khảo
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() {});
Lưu ý: con trỏ.each có thể không được dùng nữa dựa trên phiên bản của bạn MongoDB tài xế. Bạn có thể thêm //noinspection JSDeprecatedSymbols trước con trỏ.each để tránh sự cố. Ngoài ra, bạn có thể sử dụng forEach. Dưới đây là mã mẫu sử dụng 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(err); db.close(); } ); }); }); var server = app.listen(8080, function() {});
Tổng kết
- Node.js được sử dụng cùng với NoSQL cơ sở dữ liệu để xây dựng nhiều ứng dụng web hiện đại. Một số cơ sở dữ liệu phổ biến được sử dụng là MySQL và MongoDB.
- Một trong những mô-đun phổ biến được sử dụng để làm việc với MongoDB cơ sở dữ liệu là một mô-đun được gọi là 'MongoDB.' Mô-đun này được cài đặt thông qua trình quản lý gói Node.
- Với MongoDB mô-đun, có thể truy vấn các bản ghi trong bộ sưu tập và thực hiện các thao tác cập nhật, xóa và chèn thông thường.
- Cuối cùng, một trong những phương pháp hiện đại là sử dụng express framework cùng với MongoDB để cung cấp các ứng dụng hiện đại. Khung Express có thể sử dụng dữ liệu được trả về bởi MongoDB driver và hiển thị dữ liệu tới người dùng trên trang web tương ứng.