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

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:

  • 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 freetuts.
  • 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/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.

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

Documents trong Mongoose

Documents trong Mongoose

Trong bài viết này chúng ta sẽ tìm hiểu về documents 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