Tích hợp ứng dụng Node.js với database MongoDB bằng Mongoose không quá khó. Dưới đây là cách dùng Mongoose trong ứng dụng Express.
Quản lý dữ liệu trong database MongoDB có thể là thử thách với nhiều người, nhất là khi phải xử lý những mẫu dữ liệu phức tạp. MongoDB là database không cấu trúc, nghĩa là bạn có thể thêm dữ liệu mà không cần phải theo cấu trúc nào. Tính linh hoạt này khiến MongoDB là lựa chọn lý tưởng để lưu trữ số lượng lớn dữ liệu nhưng cũng khiến việc quản lý chúng trở nên khó khăn hơn.
Mongoose cung cấp một giải pháp dựa trên cấu trúc, giúp đảm bảo dữ liệu đã lưu vào MongoDB đều nhất quán và được định dạng chính xác. Với Mongoose, bạn có thể xác định một lược đồ cho các mô hình dữ liệu của mình, sơ đồ này chỉ định cấu trúc của dữ liệu và các quy tắc về cách định dạng dữ liệu đó. Dưới đây là cách dùng Mongoose trong ứng dụng Express.
Tạo môi trường phát triển
Trước khi dùng Mongoose, bạn phải cài đặt nó làm phần phụ thuộc trong dự án.
Bạn có thể cài đặt Mongoose bằng lệnh sau:
npm install mongoose
Sau đó, kết nối ứng dụng với MongoDB bằng Mongoose.
Mongoose kết nối MongoDB Database bằng phương thức connect, lấy MongoDB URL làm đối số.
Ví dụ:
// index.js
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1:27017/example", () =>
console.log("Connected to database successfully")
);
Khối code trên kết nối một phiên bản MongoDB nội bộ và ghi lại thông báo thành công.
Tạo một mẫu Mongoose
Một mẫu Mongoose là class dựa trên lược đồ trong Mongoose, cho phép bạn tương tác với bộ sưu tập MongoDB.
Mongoose schema xác định cấu trúc của tài liệu mà bạn có thể lưu trữ trong bộ sưu tập MongoDB, đồng thời, cung cấp giao diện để tạo, đọc, cập nhật và xóa tài liệu trong bộ sưu tập đó.
Khi xác định mô hình Mongoose, bạn xác định cấu trúc cho các tài liệu trong bộ sưu tập đó, bao gồm các thuộc tính, kiểu và bất kỳ xác nhận hợp lệ.
Dưới đây là một ví dụ về mẫu Mongoose cho một bộ sưu tập User:
const mongoose = require("mongoose");
const userSchema = mongoose.Schema({
name: {
type: String,
required: [true, "Name is required"],
},
email: {
type: String,
required: true,
},
age: {
type: Number,
validate: {
validator: function (value) {
return value > 0;
},
message: () => "Please enter a valid age",
},
},
});
const User = mongoose.model("User", userSchema);
module.exports = User;
Khối code trên xác định một mẫu Mongoose với 3 thuộc tính: name, email và age. Mỗi thuộc tính có một bộ các quy tắc được xác định mà bạn phải theo khi ánh xạ một giá trị vào trường được chỉ định của nó.
Sau khi xác định cấu trúc, khối code tạo một mẫu Mongoose mang tên User bằng phương thức mongoose.model(). Nó tính hai đối số: tên và cấu trúc của mẫu để dùng cho tài liệu.
Cuối cùng mẫu User được xuất sang các phần khác của ứng dụng.
Tương tác với MongoDB bằng Mongoose
Với ứng dụng được kết nối database MongoDB, mẫu được tạo và có thể truy cập tới các phần khác của ứng dụng, bạn có thể tương tác với database bằng phương thức được cung cấp bởi Mongoose.
Lưu ý, đảm bảo nhập mẫu Mongoose vào bất kỳ mô đun chạy các hoạt động CRUD.
Ví dụ:
// router.js
const User = require("./userModel")
Tạo tài liệu
Đầu tiên, tạo một phiên bản class của mẫu, rồi gọi phương thức save. Ví dụ:
//Creating a new user
let user = new User({
name,
email,
age,
});
//Saving user to database
user
.save()
.then(() => {
console.log("User created successfully");
})
.catch((error) => {
//handle error
});
Khối code trên tạo và lưu một tài liệu User mới cho database MongoDB. Bạn cũng có thể lưu dữ liệu vào database bằng create. Phương thức này khởi tạo mô hình và gọi save trên nó. Nói cách khác, nó kết hợp hai tác vụ của kỹ thuật đã nhắc tới trước đó.
Ví dụ:
User.create({ name, email, age }, (err, data) => {
if (err) throw new Error("Internal Server Error");
console.log(`User created successfully: ${data}`);
});
Khối code trên tạo một tài liệu User mới với thuộc tính được chuyển dưới dạng đối số sang phương thức create.
Ngoài ra, bạn có thể lưu dữ liệu vào database bằng insertMany. Tuy nhiên, phương thức này chỉ hoàn hảo trong việc lưu dữ liệu hàng loạt.
Ví dụ:
User.insertMany(
[
{ name, email, age },
{ name_1, email_1, age_1 },
],
(err, result) => {
if (err) {
//handle error
} else {
//Send results
}
}
);
Khối code trên tạo hai tài liệu mới trong bộ sưu tập User bằng mảng đã chuyển dưới dạng đối số sang phương thức insertMany.
Đọc tài liệu
Bạn có thể truy cập tất cả tài liệu đã lưu trong database MongoDB bằng phương thức find của Mongoose.
Ví dụ:
User.find({})
.then((data) => {
console.log(data);
})
.catch((err) => {
//handle error
});
Khối code trên sẽ trả về tất cả tài liệu trong bộ sưu tập User.
Update tài liệu
Bạn có thể update tài liệu trên MongoDB bằng Mongoose nhờ phương thức findByIdUpdate. Phương pháp này lấy ID và một đối tượng bằng các chi tiết được update. Ví dụ:
User.findByIdAndUpdate(id, req.body, (err, doc) => {
if (doc) {
//Send response
}
if (err) {
//handle error
}
});
Khối code trên cập nhật tài liệu có ID không trùng khớp ID được cung cấp với đối tượng update tương ứng (req.body).
Xóa tài liệu
Bạn có thể xóa tài liệu trên MongoDB với Mongoose bằng phương thức findByIdAndDelete. Phương thức này lấy ID làm đối số và xóa tài liệu bằng ID tương ứng.
Ví dụ:
User.findByIdAndDelete(id, (error, result) => {
if (result) {
//Handle result
}
if (error) {
//Handle error
}
});
Trên đây là cách dùng Mongoose trong ứng dụng Express. Hi vọng bài viết hữu ích với các bạn.