06/04/2021, 14:50

Models trong Mongoose - NodeJS căn bản

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

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:

  • modelName: tên của collectionsModel đó 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ên Zaidap.com.
  • 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.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/Zaidap.com', {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.

Hoàng Hải Đăng

24 chủ đề

7226 bài viết

Cùng chủ đề
0