Tìm hiểu sâu về cơ sở dữ liệu NoSQL của Firebase

4 min read

Cloud Firestore

Lợi ích của Firestore

Firestore cung cấp nhiều lợi ích khác nhau cho các nhà phát triển, khiến nó trở thành một lựa chọn hấp dẫn để quản lý dữ liệu trong các ứng dụng web và di động. Một số lợi ích đáng kể của Firestore bao gồm:

  • Đồng bộ hóa thời gian thực
  • Hỗ trợ ngoại tuyến
  • Hỗ trợ truy vấn toàn diện
  • Cấu trúc dữ liệu phân cấp
  • Khả năng mở rộng mạnh mẽ

Tổ chức dữ liệu trong Firestore

Mô hình dữ liệu phân cấp của Firestore cho phép các nhà phát triển cấu trúc và sắp xếp dữ liệu của họ một cách hiệu quả và trực quan. Ví dụ: một ứng dụng quản lý khách sạn có thể lưu trữ dữ liệu của nó trong Firestore với cấu trúc sau:

  • Collections (Bộ sưu tập):
    • Hotels (Khách sạn): Mỗi tài liệu trong bộ sưu tập này đại diện cho một khách sạn.
      • Mỗi tài liệu sẽ có một ID duy nhất, có thể được tạo tự động bằng Firestore.
      • Thuộc tính của tài liệu có thể bao gồm thông tin về tên khách sạn, địa chỉ, số sao, tiện ích…
  • Subcollections (Bộ sưu tập con):
    • Rooms (Phòng): Mỗi khách sạn có thể có một bộ sưu tập các phòng.
      • Mỗi tài liệu trong bộ sưu tập này đại diện cho một phòng trong khách sạn.
      • Thuộc tính của tài liệu có thể bao gồm loại phòng, giá, trạng thái (đã đặt, trống)…
    • Bookings (Đặt phòng): Mỗi khách sạn có thể có một bộ sưu tập các đặt phòng.
      • Mỗi tài liệu trong bộ sưu tập này đại diện cho một đặt phòng.
      • Thuộc tính của tài liệu có thể bao gồm thông tin về ngày đặt, ngày nhận phòng, ngày trả phòng, chi tiết phòng đã đặt…
  • Nested Subcollections (Bộ sưu tập con lồng nhau):
    • Customers (Khách hàng): Mỗi đặt phòng có thể liên kết với một khách hàng.
      • Trong mỗi tài liệu của bộ sưu tập này, có thể chứa thông tin chi tiết của khách hàng như tên, email, số điện thoại…

Thiết lập Firestore trong ứng dụng của bạn

  • Tạo Dự án Firebase
  • Thêm Firestore vào dự án của bạn
  • Định cấu hình SDK Firebase
  • Khởi tạo Firestore
const admin = require("firebase-admin");
const firebase = require("firebase/app");
require("firebase/auth");
require("firebase/firestore");
const serviceAccount = require("../serviceAccountKey.json");

const firebaseApp =initializeApp({
      credential: admin.credential.cert(serviceAccount ),
      databaseURL: DATABASE_URL_PROD,
      storageBucket: STORAGE_BUCKET_PROD,
    }); 
const db = getFirestore(firebaseApp);

Truy vấn dữ liệu trong Firestore

1. Tìm nạp một tài liệu:

Để tìm nạp một tài liệu cụ thể từ Firestore, bạn có thể sử dụng phương thức get() trên một tài liệu tham chiếu. Dưới đây là cách thực hiện bằng JavaScript:

var docRef = db.collection("hotels").doc("id");

docRef.get().then((doc) => {
    if (doc.exists) {
        console.log("Data:", doc.data());
    } else {
        console.log("error");
    }
}).catch((error) => {
    console.log("Lỗi khi tải tài liệu:", error);
});

2. Tìm nạp một bộ sưu tập tài liệu:

Để tìm nạp một bộ sưu tập tài liệu từ Firestore, bạn có thể sử dụng phương thức get() trên một tham chiếu của bộ sưu tập. Dưới đây là cách thực hiện bằng JavaScript:

var collectionRef = db.collection("hotels");

collectionRef.get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log("Data:", doc.id, doc.data());
    });
}).catch((error) => {
    console.log("error:", error);
});

3. Lọc tài liệu:

Để lọc tài liệu trong Firestore, bạn có thể sử dụng phương thức where() để áp dụng điều kiện cho truy vấn của mình. Dưới đây là cách thực hiện bằng JavaScript:

var roomRef = db.collection("hotels").where("hotelName", "===", "vinh");

roomRef .get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log("data:", doc.id, doc.data());
    });
}).catch((error) => {
    console.log("error:", error);
});

4. Sắp xếp và phân trang tài liệu:

Để sắp xếp và phân trang tài liệu trong Firestore, bạn có thể sử dụng phương thức orderBy(), limit(), và startAfter() hoặc startAt(). Dưới đây là cách thực hiện bằng JavaScript:

var roomRef = db.collection("hotels").orderBy("id", "desc").limit(5);

roomRef.get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log("data:", doc.id, doc.data());
    });
}).catch((error) => {
    console.log("error:", error);
});

Kết luận

Google Firestore là giải pháp cơ sở dữ liệu NoSQL mạnh mẽ, có thể mở rộng và linh hoạt, mang lại lợi ích cho việc phát triển ứng dụng hiện đại, bao gồm đồng bộ hóa dữ liệu theo thời gian thực và hỗ trợ ngoại tuyến. Mô hình dữ liệu phân cấp, khả năng truy vấn mạnh mẽ và quy tắc bảo mật khiến nó trở thành lựa chọn hấp dẫn cho các nhà phát triển đang tìm kiếm giải pháp dữ liệu toàn diện cho ứng dụng web và di động của họ.

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *