CĂN BẢN
SERVER
MYSQL
MONGODB
MODULE
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Documents trong Mongoose

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

DocumentModels 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.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
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 documentMongoose 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: 'Freetuts.net' });
await doc.save();

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

await Person.replaceOne({ _id }, { name: 'Freetuts.net' });

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.

Cùng chuyên mục:

Crawl dữ liệu website bằng NodeJS cơ bản

Crawl dữ liệu website bằng NodeJS cơ bản

CORS là gì ? Xử lý CORS trong NodeJS

CORS là gì ? Xử lý CORS trong NodeJS

Chắc hẳn trong quá trình xử lý các request tới server thì một vài trường…

Xử lý form trong Express

Xử lý form trong Express

Xây dựng URL trong Express

Xây dựng URL trong Express

Trong bài viết này chúng ta sẽ cùng nhau đi tìm hiểu về cách xây…

Populate trong Mongoose

Populate trong Mongoose

Error Handling & Debugging trong Socket.io

Error Handling & Debugging trong Socket.io

Namespaces & Rooms trong Socket.io

Namespaces & Rooms trong Socket.io

Middleware trong Mongoose

Middleware trong Mongoose

Create / Read / Update / Delete trong Mongoose

Create / Read / Update / Delete trong Mongoose

Validation trong Mongoose

Validation trong Mongoose

Subdocuments trong Mongooose

Subdocuments trong Mongooose

Models trong Mongoose

Models trong Mongoose

SchemaTypes trong Mongoose

SchemaTypes trong Mongoose

Schemas trong Mongoose

Schemas trong Mongoose

Mongoose trong NodeJS

Mongoose trong NodeJS

Làm việc với Table MySQL sử dụng Nodejs

Làm việc với Table MySQL sử dụng Nodejs

Kết nối với MongoDB trong NodeJS

Kết nối với MongoDB trong NodeJS

Giới thiệu MongoDB trong NodeJS

Giới thiệu MongoDB trong NodeJS

Insert / Update / Delete / Select MySQL trong NodeJS

Insert / Update / Delete / Select MySQL trong NodeJS

Broadcasting trong Socket.io

Broadcasting trong Socket.io

Top