Lần đầu tiên mình làm việc với NodeJS là vào năm 2015, lúc đó NodeJS vẫn còn khá sơ khai, và dự án đầu tiên mình làm là sử dụng NodeJS với mongodb để lưu dữ liệu, sau đó lại đọc dữ liệu từ mongodb để đẩy lên cloud. Dự án này làm tương đối ngắn và lúc đó mình cũng không quá nhiều ấn tượng. Vậy nên mình muốn giới thiệu đến các bạn NodeJS kết nối đến mongodb trước sau đó đến SQL sau nhé.

Một chút về MongoDB

MongoDB là một hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở đa nền tảng viết bằng C++ [nguồn].

MongoDB quản lý các cơ sở dữ liệu, trong mỗi cơ sở dữ liệu thì lại có các collection, bạn có thể coi các collection này giống như các bảng trong SQL.
MongoDB sử dụng json trong hầu hết các hoạt động của mình nên nó cũng rất dễ sử dụng với NodeJS mà không quá rườm ra trong việc chuyển đối qua lại giữa các đối tượng và json.
Với MongoDB bạn không cần phải tạo trước collection giống như tạo bảng SQL, nó sẽ tự tạo schema cho bạn tương ứng với dữ liệu mà bạn lưu trữ, đây cũng là một trong những điểm thú vị của MongoDB. Tuy nhiên bạn cũng có thể tạo các index cho collection, ví dụ:

db.users.createIndex({ username: 1, email: 1 })

Cách ứng dụng NodeJS kết nối đến MongoDB

Ứng dụng của chúng ta muốn kết nối được sẽ phải thông qua MonoDB driver, về mã nguồn thì đây là một node module.
Bên trong MonoDB driver lại sử dụng Net module, một trong những module core của NodeJS cho phần network để kết nối đến MongoDB server.

const { MongoClient } = require('mongodb');
const url = 'mongodb://root:123456@localhost:27017/test';
const dbName = 'test';

async function main() {
  const client = new MongoClient(url);

  try {
    await client.connect();
    console.log('Connected to database');

    const db = client.db(dbName);

    const collection = db.collection('users');

    const insertResult = await collection.insertOne({
      name: 'Techmaster',
      email: 'contact@techmaster.vn v',
      age: 30,
    });
    console.log('Inserted document:', insertResult.insertedId);

    const findResult = await collection.findOne({ name: 'Techmaster' });
    console.log('Found document:', findResult);

    const updateResult = await collection.updateOne(
      { name: 'Techmaster' },
      { $set: { age: 31 } }
    );
    console.log('Updated document:', updateResult.modifiedCount);

    const deleteResult = await collection.deleteOne({ name: 'Techmaster' });
    console.log('Deleted document:', deleteResult.deletedCount);
    
  } finally {
    await client.close();
  }
}

main().catch(console.error);

Trong ví dụ này chúng ta đang lưu thông tin 1 người dùng vào collection users sau đó cập nhật và xoá nó đi.
Ở bước lưu thông tin người dùng sử dụng hàm insertOne, mongodb sẽ tự động tạo cho chúng ta một collection users tương tự như chúng ta tạo bằng lệnh thế này:

db.createCollection('users', {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      properties: {
        name: {
          bsonType: "string",
        },
        email: {
          bsonType: "string"
        },
        age: {
          bsonType: "int"
        }
      }
    }
  }
});

Chạy ví dụ bằng lệnh node main.js kết quả chúng ta nhận được là:

Connected to database
Inserted document: new ObjectId('67076157b4cdde67dfe80dd4')
Found document: {
  _id: new ObjectId('67076157b4cdde67dfe80dd4'),
  name: 'Techmaster',
  email: 'contact@techmaster.vn v',
  age: 30
}
Updated document: 1
Deleted document: 1

Tổng kết

Như vậy chúng ta đã cùng nhau tìm hiểu sơ qua về MongoDB sử dụng với NodeJS, trong bài sau chúng ta tìm hiểu các hàm hay được sử dụng trong MongoDB nhé.


Cám ơn bạn đã quan tâm đến bài viết|video này. Để nhận được thêm các kiến thức bổ ích bạn có thể:

  1. Đọc các bài viết của TechMaster trên facebook: https://www.facebook.com/techmastervn
  2. Xem các video của TechMaster qua Youtube: https://www.youtube.com/@TechMasterVietnam nếu bạn thấy video/bài viết hay bạn có thể theo dõi kênh của TechMaster để nhận được thông báo về các video mới nhất nhé.
  3. Chat với techmaster qua Discord: https://discord.gg/yQjRTFXb7a