MongoDB là gì? Các khái niệm trong MongoDB

This entry is part 1 of 24 in the series MongoDB

MongoDB là gì? Các khái niệm trong MongoDB

Hướng dẫn MongoDB - Code ví dụ Java + MongoDB.

MongoDB là gì?

MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở.

Sự khác nhau giữa MongoDB với các hệ quản trị cơ sở dữ liệu quan hệ (RELATIONAL DATABASE MANAGEMENT SYSTEM – RDBMS) như MySQL, MS SQL… đó là lưu dữ liệu dạng NoSQL tức là không có sự ràng buộc giữa các bảng.

MongoDB là document database – database hướng tài liệu.

Dữ liệu trong MongoDB lưu dưới dạng json. Do đó có thể hiểu document database ở đây nghĩa là dữ liệu lưu trữ kiểu text/json, chứ không lưu theo kiểu bảng, cột với kiểu dữ liệu byte, clob… như trong RDBMS.

Một số khái niệm trong MongoDB

Khi làm việc với MongoDB bạn sẽ gặp các khái niệm sau:

Collection, Document, Embeded documents, linking, Primary Key. Vậy chúng là gì?

RDBMS MongoDB
Database Database
Table Collection
Row Document
Column Field
Table Join Embedded Documents
Primary Key Primary Key (mặc định là _id)

Chắc hẳn bạn sẽ tự hỏi tại sao không dùng luôn mấy khái niệm table, row… đi cho dễ nhớ còn bày đặt ra Collection, document là gì. Có lý do của nó nhé.

  • Collection: Collection là một nhóm các dữ liệu thuộc cùng loại do người dùng qui định, sự khác nhau giữa collection với table trong RDBMS đó là collection không có ràng buộc, quan hệ với collection khác. Mỗi dữ liệu trong collection không cố định về số trường như row trong table.
  • Document: Document là một tài liệu lưu trữ dưới dạng json. Nó tương đương với row trong table của RDBMS nhưng dữ liệu trong document khá linh hoạt, nó không cố định có bao nhiêu trường, dữ liệu trong mỗi trường phải là cố định.
  • Embedded Documents: Nếu trong RDBMS, chúng ta có kiểu join các bảng, ví dụ bảng person join với bảng address để biết một person có những address nào thì trong MongoDB, document của person sẽ chứa 1 array các document address.
  • Primary Key: Mặc định primary key trong MongoDB là field _id, lúc insert nếu bạn không chỉ rõ trường _id thì nó sẽ tự động generate giá trị cho _id.

Bạn thấy đấy, dữ liệu trong Collection, Document khác hẳn với Table, Row.

Nó rất linh hoạt, bạn thích insert gì vào cũng được, không cứ phải một kiểu cố định, số lượng field cố định.

Ví dụ:

Dưới đây là một document trong MongoDB:

{
    "_id" : ObjectId("5b5ddca8e25fd6f9fb473087"),
    "name" : "kai",
    "age" : 27,
    "address" : [ 
        "vietnam", 
        "korean"
    ]
}

Nếu là trong RDBMS thì ta sẽ có 2 table:

  • table person (id, name, age)
  • table address: (id, descript, person) trong đó person link tới table person.

MongoDB là gì? Các khái niệm trong MongoDB

Nhưng khi cấu trúc của dữ liệu thay đổi thì bạn sẽ phải sửa cột, sửa bảng… còn MongoDB thì không.

Chẳng hạn như adress có thêm thông tin như province, street… column age chuyển sang kiểu text, hay thêm column mới là gender thì với MongoDB ta chỉ cần thêm dữ liệu rồi insert bình thường:

{
    "_id" : ObjectId("5b5ddeb7e25fd6f9fb4730c6"),
    "name" : "kai",
    "age" : "27",
    "address" : [ 
        {
            "country" : "viet nam",
            "province" : "ha noi",
            "street" : "nguyen trai"
        }, 
        {
            "country" : "korea",
            "province" : "seoul"
        }
    ],
    "gender" : "male"
}

Ưu nhược điểm của MongoDB

Phần ưu nhược điểm của MongoDB mình tách ra một bài riêng, vì mình muốn giải thích chi tiết hơn.

Ưu nhược điểm của MongoDB, khi nào nên dùng MongoDB

MongoDB là gì? Các khái niệm trong MongoDB stackjava.com

Okay, Done!

References:

https://docs.mongodb.com/manual/introduction/

Series NavigationHướng dẫn cài đặt, cấu hình MongoDB trên Windows 10 >>
stackjava.com