Ví dụ Documents Mongoose trong Nodejs

Ví dụ Documents Mongoose trong Nodejs là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Ví dụ Documents Mongoose trong Nodejs sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và NodeJS nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Trong bài viết này chúng ta sẽ tìm hiểu về documents trong Mongoose. Documents đại diện cho các dữ liệu được lưu trữ trong MongoDB. Trong Mongoose các khái niệm về Model và Documents có mối liên hệ chặt chẽ với nhau.

1. Documents vs Models

Document và Models là hai khái niệm khác biệt nhau nhưng có mối quan hệ chặt chẽ với nhau. Trong Mongoose Model là một lớp của Document, khi chúng ta khởi tạo môt Model đồng nghĩa với nó là chúng ta khởi tạo một document.

const MyModel = mongoose.model('Test', new Schema({ name: String }));
const doc = new MyModel();
 
doc instanceof MyModel; // true
doc instanceof mongoose.Model; // true
doc instanceof mongoose.Document; // true 

Trong Mongoose, một document bắt buộc nên đi với Model, không nên tạo một document mà không sử dụng đến Model.

2. Nhận giá trị

Khi bạn lấy một document từ MongoDB sử dụng model function như là findOne(), find(),...Mongoose sẽ trả lại cho bạn document type . Ví dụ như bên dưới:

 const doc = await MyModel.findOne();
 
doc instanceof MyModel; // true
doc instanceof mongoose.Model; // true
doc instanceof mongoose.Document; // true 

3. Cập nhật giá trị

Mongoose documents theo dõi các thay đổi. Bạn có thể cập nhật các các giá trị bằng cách thay đổi các giá trị của thuộc tính trong document và Mongoose sẽ tự động nhận thấy sự thay đổi và cập nhật.

doc.name = 'foo';
 
// Tương đương với `updateOne({ _id: doc._id }, { $set: { name: 'foo' } })`
// trong MongoDB.
await doc.save(); 

Nếu nhận thấy một lỗi xảy ra, ví dụ như không tìm thấy _id, Mongoose sẽ trả về thông báo lỗi : DocumentNotFoundError

const doc = await MyModel.findOne();
 
// Xóa document câu lệnh tiếp theo không thể cập nhật
await MyModel.deleteOne({ _id: doc._id });
 
//Tiến hành cập nhật
doc.name = 'foo';
 
//Lưu cập nhật
await doc.save(); // Throws DocumentNotFoundError 

Trong mọi trường hợp function save() là cách tốt nhất để cập nhật một document lúc này các tính năng như validation và middleware sẽ được sử dụng. Ngoài ra nếu bạn không muốn Mongoose validation dữ liệu và sử dụng middleware thì bạn có thể sử dụng:

  await MyModel.updateMany({}, { $set: { name: 'foo' } }); 

Lưu ý rằng cách method như update(), updateMany(), findOneAndUpdate(), etc...khi sử dụng không cần phải dùng đến save() middleware. Nếu bạn cần sử dụng validation, middleware thì cân nhắc sử dụng save() middleware.

4. Validating (Kiểm tra dữ liệu)

Các document cần phải kiểm tra trước khi được xử lý, Mongoose có một phương thức xác giúp xác thực được gọi là validate(). Giả sử mình sẽ tiến hành validate một document:

const schema = new Schema({ name: String, age: { type: Number, min: 0 } });
const Person = mongoose.model('Person', schema);
 
let p = new Person({ name: 'foo', age: 'bar' });
// Thất bại bởi age chỉ được thêm dạng number
await p.validate();
 
let p2 = new Person({ name: 'foo', age: -1 });
 
// Lỗi vì `age` (-1) nhỏ hơn 0.
await p2.validate(); 

Mongoose cho phép chúng ta validation() trong cách method như updateOne(), InsertOne(),...để tinh chỉnh các trạng thái validate bạn cần thêm options vào runValidators: true.

// Thất bại bởi age chỉ được thêm dạng number
await Person.updateOne({}, { age: 'bar' });
 
// Lỗi vì `age` (-1) nhỏ hơn 0.
await Person.updateOne({}, { age: -1 }, { runValidators: true }); 

5. Ghi đè một document

Có 2 cách để ghi đè một document, cách thứ nhất là bạn thay đổi tất cả các thuộc tính trong đó, Mongoose hỗ trợ một phương thức có tên overwrite() theo sau đó là save().

const doc = await Person.findOne({ _id });
 
// Update lại thuộc tính name 
doc.overwrite({ name: 'Hoidapcode.com' });
await doc.save();

Còn cách khác có thể dùng là :

  await Person.replaceOne({ _id }, { name: 'Hoidapcode.com' }); 

Trên đây là những kiến thức cơ bản về Documents trong Mongoose. Mong bài viết này có thể giúp ích cho bạn cho việc lập trình với NodeJS, cảm ơn bạn đã quan tâm bài viết này.

Hy vọng với bài viết về Ví dụ Documents Mongoose trong Nodejs đã giải đáp giúp bạn phần nào về kiến thức lập trình NodeJS. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!