Document

Document là đơn vị cơ bản trong MongoDB, tương tự như một hàng trong cơ sở dữ liệu quan hệ. Mỗi document là một đối tượng JSON (hoặc BSON) có thể chứa các cặp key-value. Document có thể chứa nhiều kiểu dữ liệu khác nhau, từ chuỗi, số nguyên đến mảng và đối tượng lồng nhau.

{
  "name": "John",
  "age": 30,
  "city": "New York",
  "skills": ["JavaScript", "MongoDB", "Node.js"]
}

Collection

Collection là tập hợp các document trong MongoDB, tương tự như một bảng trong cơ sở dữ liệu quan hệ. Mỗi collection có thể chứa nhiều document với cấu trúc dữ liệu khác nhau, cho phép tính linh hoạt trong việc lưu trữ thông tin.

db.users.insertMany([
  { "name": "Alice", "age": 25 },
  { "name": "Bob", "age": 28 }
]);

Database

Database là một tập hợp các collection. Một MongoDB có thể chứa nhiều database, mỗi database có thể chứa nhiều collection. Bạn có thể tạo và quản lý các database trong MongoDB bằng cách sử dụng các lệnh như use để chuyển đổi giữa các database.

use myDatabase

MongoDB URI

MongoDB URI là chuỗi kết nối được sử dụng để kết nối với MongoDB. Nó bao gồm thông tin về địa chỉ, cổng, tên database, và thông tin xác thực nếu cần. Cấu trúc của URI có thể như sau:

mongodb://username:password@localhost:27017/myDatabase

Index

Index là cấu trúc dữ liệu được sử dụng để cải thiện tốc độ truy vấn trong MongoDB. Bằng cách tạo index cho các trường trong document, bạn có thể giảm thời gian truy vấn và cải thiện hiệu suất. Dưới đây là cách tạo index cho trường name:

db.users.createIndex({ "name": 1 });

Shard

Shard là một phần của tập hợp dữ liệu được phân tán trên nhiều máy chủ. MongoDB hỗ trợ sharding để mở rộng quy mô theo chiều ngang, giúp tăng cường khả năng xử lý và lưu trữ dữ liệu. Việc cấu hình sharding có thể thực hiện như sau:

sh.shardCollection("myDatabase.users", { "userId": 1 });

Replica Set

Replica set là nhóm các MongoDB servers hoạt động cùng nhau để cung cấp tính sẵn có và độ tin cậy. Một replica set có ít nhất ba member, trong đó có một primary và các secondary. Dưới đây là cách cấu hình một replica set:

rs.initiate({
  _id: "myReplicaSet",
  members: [
    { _id: 0, host: "localhost:27017" },
    { _id: 1, host: "localhost:27018" },
    { _id: 2, host: "localhost:27019" }
  ]
});

Aggregation

Aggregation là quá trình xử lý dữ liệu để tính toán giá trị tổng hợp hoặc biến đổi dữ liệu. MongoDB cung cấp nhiều phương pháp aggregation, bao gồm aggregation pipeline. Dưới đây là một ví dụ về sử dụng aggregation để tính tổng số người dùng theo thành phố:

db.users.aggregate([
  { $group: { _id: "$city", totalUsers: { $sum: 1 } } }
]);

Query

Query là yêu cầu tìm kiếm hoặc thao tác dữ liệu trong MongoDB. Các truy vấn có thể được thực hiện thông qua ngôn ngữ truy vấn của MongoDB, cho phép bạn lấy, thêm, sửa hoặc xóa document. Ví dụ:

db.users.find({ "age": { $gt: 25 } });

GridFS

GridFS là một hệ thống lưu trữ tệp trong MongoDB cho phép lưu trữ và truy xuất các tệp lớn hơn kích thước tối đa của một document. Bạn có thể lưu trữ các tệp như hình ảnh, video hoặc tài liệu lớn. Dưới đây là cách lưu trữ một tệp bằng GridFS:

const fs = require('fs');
const { MongoClient, GridFSBucket } = require('mongodb');

const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const bucket = new GridFSBucket(client.db('myDatabase'));

fs.createReadStream('largeFile.png').pipe(bucket.openUploadStream('largeFile.png'));

BSON (Binary JSON)

BSON là định dạng lưu trữ dữ liệu của MongoDB, cho phép lưu trữ dữ liệu dạng JSON cùng với các kiểu dữ liệu phức tạp hơn. BSON hỗ trợ nhiều kiểu dữ liệu, bao gồm cả ObjectId, Date và Binary.

Change Stream

Change Stream là tính năng cho phép người dùng theo dõi và phản hồi các thay đổi trong một collection hoặc database theo thời gian thực. Dưới đây là cách sử dụng Change Stream:

const changeStream = db.collection('users').watch();
changeStream.on('change', (change) => {
  console.log('Change detected:', change);
});

Aggregation Framework

Aggregation Framework là bộ công cụ mạnh mẽ trong MongoDB để thực hiện các phép toán tổng hợp, biến đổi dữ liệu và truy vấn phức tạp. Bạn có thể sử dụng aggregation framework để thực hiện nhiều phép toán phức tạp, bao gồm sorting, grouping và filtering.

Projection

Projection là một cách để chỉ định các trường (fields) cụ thể mà bạn muốn truy vấn trong một document, giúp giảm bớt lượng dữ liệu được truyền qua mạng. Ví dụ:

db.users.find({}, { "name": 1, "age": 1 });

Write Concern

Write Concern là tùy chọn cho biết mức độ xác nhận cần thiết khi thực hiện một thao tác ghi vào cơ sở dữ liệu, đảm bảo rằng dữ liệu đã được ghi đúng cách. Bạn có thể chỉ định write concern trong các lệnh ghi, ví dụ:

db.users.insertOne({ "name": "Eve" }, { writeConcern: { w: "majority" } });

Kết luận

Việc hiểu rõ các thuật ngữ này sẽ giúp bạn làm việc hiệu quả hơn với MongoDB và phát triển ứng dụng dựa trên nền tảng cơ sở dữ liệu này. Sự linh hoạt và khả năng mở rộng của MongoDB cùng với các khái niệm và thuật ngữ này mang lại nhiều cơ hội cho các nhà phát triển và kỹ sư dữ liệu.