Ví dụ Models Mongoose trong Nodejs

Ví dụ Models 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ụ Models 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 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à Hoidapcode thì collection sẽ có tên Hoidapcode.
  • 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/Hoidapcode', {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.

Hy vọng với bài viết về Ví dụ Models 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!