Cách Sử Dụng MongoDB với Node.js để Truy Vấn Dữ Liệu
Giới Thiệu
Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng Node.js kết hợp với MongoDB để thực hiện các truy vấn cơ bản. MongoDB là một cơ sở dữ liệu NoSQL phổ biến, trong khi Node.js là một môi trường chạy JavaScript phía máy chủ. Việc kết hợp hai công nghệ này giúp bạn xây dựng các ứng dụng web mạnh mẽ và hiệu quả. Chúng ta sẽ đi qua một ví dụ cụ thể về việc truy vấn các ID ứng dụng được tạo ra từ một thời điểm nhất định.
Mục Lục
- Cài Đặt Môi Trường
- Cấu Trúc Dữ Liệu
- Truy Vấn Dữ Liệu
- Thực Hành
- Thực Tiễn Tốt Nhất
- Cạm Bẫy Thông Thường
- Mẹo Hiệu Suất
- Giải Quyết Vấn Đề
- Kết Luận
- Câu Hỏi Thường Gặp
Cài Đặt Môi Trường
Trước khi bắt đầu, bạn cần cài đặt Node.js và MongoDB trên máy tính của mình. Nếu bạn chưa cài đặt, hãy làm theo các bước sau:
- Cài Đặt Node.js: Truy cập trang chủ Node.js để tải xuống và cài đặt phiên bản mới nhất.
- Cài Đặt MongoDB: Truy cập trang chủ MongoDB để tải xuống và cài đặt MongoDB Community Server.
- Cài Đặt Thư Viện MongoDB cho Node.js: Sử dụng npm để cài đặt thư viện MongoDB:
bash
npm install mongodb
Cấu Trúc Dữ Liệu
Trong ví dụ này, chúng ta sẽ làm việc với một bộ sưu tập có tên là application. Mỗi tài liệu trong bộ sưu tập này sẽ chứa các trường như createdTimeStamp.dateTime và applicationId. Dưới đây là ví dụ về định dạng tài liệu:
json
{
"applicationId": "6ef60b66...",
"createdTimeStamp": {
"dateTime": "2025-09-19T04:00:00Z"
}
}
Truy Vấn Dữ Liệu
Chúng ta sẽ viết một script Node.js để truy vấn các ID ứng dụng được tạo ra từ một thời điểm nhất định, ví dụ như từ thứ Sáu tuần trước. Dưới đây là mã nguồn chi tiết:
Mã Nguồn
javascript
// findAppIdsCreatedSinceFriday.js
// Sử dụng: MONGO_URI="mongodb://..." node findAppIdsCreatedSinceFriday.js
const { MongoClient } = require("mongodb");
(async () => {
const uri = process.env.MONGO_URI || "mongodb://localhost:27017";
const dbName = process.env.DB_NAME || "som";
const collName = process.env.COLL_NAME || "application";
// 🔒 Ngày và giờ của thứ Sáu bạn muốn
const FRIDAY_ISO_UTC = "2025-09-19T04:00:00Z";
const boundary = new Date(FRIDAY_ISO_UTC);
const boundaryISO = boundary.toISOString();
const client = new MongoClient(uri);
try {
await client.connect();
const coll = client.db(dbName).collection(collName);
console.log("Giới hạn (UTC):", boundaryISO);
const filter = {
$or: [
{ "createdTimeStamp.dateTime": { $gte: boundary } },
{
$and: [
{ "createdTimeStamp.dateTime": { $type: "string" } },
{ "createdTimeStamp.dateTime": { $gte: boundaryISO } }
]
}
]
};
const projection = { _id: 0, applicationId: 1 };
const cursor = coll.find(filter, { projection }).batchSize(1000);
let count = 0;
for await (const doc of cursor) {
if (doc && doc.applicationId != null) {
console.log(String(doc.applicationId));
count++;
}
}
console.log("Số lượng khớp:", count);
} catch (err) {
console.error("Lỗi:", err);
} finally {
await client.close();
}
})();
Giải Thích Mã Nguồn
- Kết Nối đến MongoDB: Sử dụng
MongoClientđể kết nối đến cơ sở dữ liệu MongoDB. - Truy Vấn Thời Gian: Dùng
Dateđể xác định thời gian giới hạn cho truy vấn. - Lọc Dữ Liệu: Sử dụng
$orđể tìm các tài liệu có trườngcreatedTimeStamp.dateTimelớn hơn hoặc bằng thời gian giới hạn. - Hiển Thị Kết Quả: Đếm và hiển thị số lượng ID ứng dụng đã khớp.
Thực Hành
Hãy thực hiện các bước dưới đây để chạy script truy vấn:
- Tạo một file mới tên là
findAppIdsCreatedSinceFriday.js. - Sao chép mã nguồn ở trên vào file này.
- Đảm bảo rằng bạn đã cài đặt MongoDB và đang chạy nó trên máy cục bộ.
- Chạy script:
bash
MONGO_URI="mongodb://localhost:27017" node findAppIdsCreatedSinceFriday.js
Thực Tiễn Tốt Nhất
- Sử Dụng Biến Môi Trường: Luôn sử dụng biến môi trường để quản lý thông tin kết nối cơ sở dữ liệu.
- Bảo Mật Dữ Liệu: Đảm bảo rằng thông tin kết nối không bị lộ ra ngoài mã nguồn.
- Kiểm Tra Lỗi: Luôn kiểm tra và xử lý lỗi khi thực hiện truy vấn.
Cạm Bẫy Thông Thường
- Thời Gian Không Đúng: Đảm bảo rằng bạn đã chuyển đổi đúng múi giờ khi sử dụng thời gian UTC.
- Lỗi Kết Nối: Kiểm tra xem MongoDB có đang chạy hay không trước khi thực hiện truy vấn.
Mẹo Hiệu Suất
- Sử Dụng BatchSize: Chia kết quả thành các khối nhỏ để giảm tải cho bộ nhớ.
- Tối Ưu Truy Vấn: Sử dụng index trên các trường thường xuyên được truy vấn để tăng tốc độ.
Giải Quyết Vấn Đề
Nếu bạn gặp lỗi, hãy kiểm tra các điểm sau:
- Kết nối đến MongoDB có thành công không?
- Trường dữ liệu có tồn tại trong bộ sưu tập không?
- Có lỗi nào được ghi lại không? Hãy kiểm tra các thông báo lỗi trong console.
Kết Luận
Bài viết này đã hướng dẫn bạn cách sử dụng Node.js để truy vấn dữ liệu từ MongoDB. Qua ví dụ cụ thể, bạn đã được làm quen với cách kết nối và truy vấn dữ liệu, cũng như những thực tiễn tốt nhất trong quá trình phát triển. Đừng ngần ngại thử nghiệm và áp dụng vào dự án của bạn!
Câu Hỏi Thường Gặp
1. Làm thế nào để cài đặt MongoDB?
Bạn có thể tải xuống MongoDB từ trang web chính thức và làm theo hướng dẫn cài đặt.
2. Có thể sử dụng Node.js cho các dự án lớn không?
Có, Node.js rất mạnh mẽ và có thể xử lý các ứng dụng quy mô lớn với hiệu suất cao.
3. Làm thế nào để tối ưu hóa truy vấn MongoDB?
Sử dụng index trên các trường thường xuyên được tìm kiếm và tránh các truy vấn phức tạp không cần thiết.