Models trong Mongoose
Trong bài viết này chúng mình sẽ cùng nhau đi tìm hiểu về Model trong Mongoose. Model là một cấu trúc được tạo ra dựa trên Schema, đại diện cho Model được là một document. Model chịu trách nhiệm tạo và đọc các document từ MongoDB.
1. Khởi tạo một Model
Trước khi khởi tạo một Model bạn cần khởi tạo một Schema, bạn nên xem bài viết về Schema trong Mongoose trước khi khởi tạo một Model.
Khi gọi hàm phương thức mongoose.model()
và truyền vào đó một Schema, mongoose sẽ tự động tạo Model cho bạn:
mongoose.model(modelName, Schema);
ở đây chúng ta có 2 tham số cần truyền vào:
Bài viết này được đăng tại [free tuts .net]
modelName
: tên của collections mà Model đó quản lí, các bạn nên để số ít bởi vì Mongoose sẽ tự động chuyển tên đó thành số nhiều. Ví dụ mình đặt làFreetut
thì collection sẽ có tênfreetuts
.Schema
: Schema mà bạn đã khởi tạo, hãy chắc chắn rằng bạn phải có môt Schema vì.model()
sẽ tạo một bản copy từ schema được truyền vào đó.
var schema = new mongoose.Schema({ name: 'string', size: 'string' }); var Tank = mongoose.model('Tank', schema);
2. Tạo một document
Model chịu trách nhiệm với các document như việc thêm, sửa, xóa, các câu truy vấn. Mình sẽ khởi tạo một Model và thêm vào đó một document.
var Tank = mongoose.model('Tank', yourSchema); var small = new Tank({ size: 'small' }); small.save(function (err) { if (err) return handleError(err); // Đã lưu }); // Hoặc Tank.create({ size: 'small' }, function (err, small) { if (err) return handleError(err); // Đã lưu }); // Hoặc bạn có thể insert vào Tank.insertMany([{ size: 'small' }], function(err) { });
Lưu ý bạn cần phải kết nối trước khi tiến hành các thao tác như thêm, sửa, xóa,... hãy chăc chắn rằng bạn đã kết nối thành công với MongoDB. Khi bạn sử dụng mongoose.model()
nó sẽ sử dụng kết nối mặc định.
mongoose.connect('mongodb://localhost/freetuts', {useNewUrlParser: true});
Nếu bạn muốn sử dụng kết nối tùy chỉnh thì bạn sử dụng model()
trong kết nối của chính nó.
var connection = mongoose.createConnection('mongodb://localhost:27017/test'); var Tank = connection.model('Tank', yourSchema);
3. Thao tác với các document bằng Model
Querying (Truy vấn )
Mongoose hỗ trợ rất nhiều cú pháp hỗ trợ truy vấn dữ liệu, document có thể được thực hiện các truy vấn bên trong Model như : find
, findById
, findOne
, hay where static methods
.,,,
Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
Deleting ( Xóa )
Model hỗ trợ một vài statics method cho việc xóa dữ liệu như : find
, findById
, findOne
, hay where static methods.....
Tank.deleteOne({ size: 'large' }, function (err) { if (err) return handleError(err); // Đã xóa một document });
Updating (cập nhật)
Mỗi Model còn cho phép cập nhật các document trong cơ sở dữ liệu với việc trả về giá trị các document đã được update thành công. Ở đây mình có môt ví dụ.
Tank.updateOne({ size: 'large' }, { name: 'T-90' }, function(err, res) { if (err) throw err //update thành công console.log(res) //trả về document đã cập nhật. });
Nếu bạn muốn update chỉ một document, bạn có thể sử dụng phương thức findOneAndUpdate
để thay thế.
Theo dõi thay đổi của document (Change Stream)
Sử dụng trong MongoDB 3.6.0 và Mongoose 5.0.0
Change Stream là khái niệm cho phép bạn lắng nghe các thay đổi như thêm, cập nhật, xóa trong hệ quản trị cơ sở dữ liệu MongoDB. Một lưu ý rằng Change Stream
chỉ hoạt động khi bạn đã kết nói với một MongoDB replica.
(async function run() { // Tạo một Schema const personSchema = new mongoose.Schema({ name: String }); //Tạo Model const Person = mongoose.model("Person", personSchema, "Person"); //Bắt sự kiện 'change', khi thay đổi sẽ hiển thị ra ngày giờ và data Person.watch().on("change", data => console.log(new Date(), data)); // Thêm document console.log(new Date(), "Inserting doc"); await Person.create({ name: "Axl Rose" }); })()
Chúng ta sẽ thấy kết quả như bên dưới:
2020-03-20T14:15:35.167Z 'Inserting doc' 2020-03-20T14:15:35.187Z 'Inserted doc' 2020-03-20T14:15:35.191Z { _id: { _data: ... }, operationType: 'insert', fullDocument: { _id: 5e73201c8c05a443592ec6df, name: 'Axl Rose', __v: 0 }, ns: { db: 'test', coll: 'Person' }, documentKey: { _id: 5e73201c8c05a443592ec6df } }
Trên đây là những kiến thức cơ bản về Model 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.