Giới thiệu
MongoDB sử dụng cấu trúc hướng tài liệu để lưu trữ, quản lý và xử lý dữ liệu. Các tài liệu riêng lẻ được sắp xếp thành các bộ sưu tập, do đó, được lưu trữ trong cơ sở dữ liệu. Bởi vì lược đồ của mỗi tài liệu không được định nghĩa bởi một lược đồ tĩnh, các hệ thống dựa trên tài liệu cung cấp tính linh hoạt hơn các hệ thống quan hệ bao gồm các bảng và bản ghi.
Trong hướng dẫn này, chúng ta sẽ nói về cách tạo và quản lý các cấu trúc mà MongoDB sử dụng để tổ chức dữ liệu. Chúng tôi sẽ trình bày cách tạo và quản lý cơ sở dữ liệu, sau đó là cách tạo bộ sưu tập để lưu giữ các tài liệu tương tự hoặc liên quan.
Cách xem cơ sở dữ liệu hiện có
Trước khi chúng tôi bắt đầu tạo cơ sở dữ liệu mới, sẽ hữu ích khi làm quen với một số phương pháp mà MongoDB cung cấp để tìm kiếm thông tin về cơ sở dữ liệu hiện có. Điều này có thể giúp bạn hiểu trạng thái hiện tại của hệ thống trước khi bạn bắt đầu thực hiện các thay đổi.
Để hiển thị tất cả cơ sở dữ liệu trên hệ thống mà bạn có quyền truy cập, hãy sử dụng show dbs
phương pháp:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
MongoDB sẽ trả lời bằng tên của tất cả các cơ sở dữ liệu có thể truy cập được trên hệ thống cũng như bản tóm tắt về không gian lưu trữ hiện tại của chúng.
Để xem cơ sở dữ liệu bạn hiện đang được thiết lập để vận hành, hãy sử dụng db.getName()
lệnh hoặc bí danh viết tắt của nó, db
:
db
test
Bạn có thể thấy rằng bạn hiện đang sử dụng cơ sở dữ liệu không được liệt kê bởi show dbs
yêu cầu. Điều này là do trong MongoDB, cho đến khi bạn ghi tài liệu đầu tiên vào cơ sở dữ liệu, cơ sở dữ liệu vẫn chưa thực sự được tạo. Vì vậy, trong đầu ra ví dụ ở trên, trình bao được chuẩn bị để hoạt động trên test
cơ sở dữ liệu, nhưng vì nó chưa tồn tại, nó sẽ không được trả về bởi show dbs
lệnh.
Để chuyển sang một cơ sở dữ liệu khác, bạn có thể sử dụng use
lệnh:
use admin
switched to db admin
Để có một số thông tin cơ bản về cơ sở dữ liệu hiện tại của bạn, bạn có thể sử dụng db.stats()
phương pháp:
db.stats()
{ "db" : "admin", "collections" : 3, "views" : 0, "objects" : 4, "avgObjSize" : 278.25, "dataSize" : 1113, "storageSize" : 86016, "indexes" : 5, "indexSize" : 147456, "totalSize" : 233472, "scaleFactor" : 1, "fsUsedSize" : 2876923904, "fsTotalSize" : 25832407040, "ok" : 1}
Kết quả đầu ra hiển thị thông tin về số lượng bộ sưu tập trong cơ sở dữ liệu, thống kê lưu trữ, thông tin chỉ mục và hơn thế nữa.
Cách tạo cơ sở dữ liệu
MongoDB không có lệnh rõ ràng để tạo cơ sở dữ liệu mới. Thay vào đó, như đã đề cập trước đó, bạn phải chỉ ra cho MongoDB biết rằng bạn muốn ghi tài liệu mới vào cơ sở dữ liệu mới. Khi những tài liệu đó được tạo, chúng sẽ ngầm tạo ra cơ sở dữ liệu.
Để chuẩn bị cho MongoDB ghi vào cơ sở dữ liệu mới, hãy phát hành use
lệnh chuyển sang cơ sở dữ liệu không tồn tại.
Ở đây, chúng tôi sẽ thiết lập MongoDB để tạo một cơ sở dữ liệu mới có tên là playground
:
use playground
switched to db playground
Nếu bạn kiểm tra cơ sở dữ liệu hiện tại của mình, nó sẽ xác nhận rằng playground
cơ sở dữ liệu hiện là mục tiêu của các lệnh liên quan đến cơ sở dữ liệu:
db
playground
Tuy nhiên, như đã đề cập trước đây, vì chúng tôi chưa tạo bất kỳ tài liệu nào nên bản thân cơ sở dữ liệu vẫn chưa được tạo:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Để thực sự tạo cơ sở dữ liệu mới, trước tiên chúng ta cần tạo một thứ gì đó.
Cách xem bộ sưu tập trong cơ sở dữ liệu
Trong MongoDB, bộ sưu tập là các cấu trúc được sử dụng để nhóm các tài liệu lại với nhau bằng cách sử dụng bất kỳ hệ thống phân loại nào bạn muốn thực hiện. Chúng sống bên trong cơ sở dữ liệu và lưu trữ tài liệu.
Bạn có thể xem các bộ sưu tập có sẵn trong cơ sở dữ liệu mà bạn hiện đang sử dụng bằng cách sử dụng show collections
phương pháp.
Tại đây, chúng tôi sẽ chuyển sang admin
cơ sở dữ liệu có sẵn một số bộ sưu tập để chứng minh:
use adminshow collections
system.rolessystem.userssystem.version
Ngoài ra, bạn có thể truy xuất các tên bộ sưu tập giống nhau trong một mảng bằng cách sử dụng db.getCollectionNames()
phương pháp:
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]
Để hiển thị thông tin bổ sung về các bộ sưu tập trong cơ sở dữ liệu hiện tại, hãy sử dụng db.getCollectionInfos()
phương pháp:
db.getCollectionInfos()
[ { "name" : "system.roles", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("776b1fd7-6014-4191-b33c-21350b590627") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "system.users", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("8c824fd1-2150-4413-8fac-0b77d16505e5") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "system.version", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Bạn cũng có thể tùy chọn chuyển lệnh để lọc kết quả trong tài liệu. Ví dụ:nếu bạn chỉ muốn xem thông tin về system.version
bộ sưu tập, bạn có thể nhập:
db.getCollectionInfos( { name: "system.version" })
[ { "name" : "system.version", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Để kiểm tra xem bộ sưu tập chứa bao nhiêu tài liệu, hãy sử dụng db.<collection>.count()
phương pháp. Ví dụ:lệnh sau kiểm tra có bao nhiêu tài liệu trong system.users
bộ sưu tập:
db.system.users.count()
2
Để xem thống kê cơ bản về các tập hợp trong cơ sở dữ liệu hiện tại, hãy sử dụng db.printCollectionStats()
phương pháp:
db.printCollectionStats()
Lệnh này có thể xuất ra nhiều thông tin hơn mức mà bạn có thể dễ dàng sử dụng, nhưng chứa, nhưng hữu ích trong một số trường hợp mà bạn cần xem xét kỹ các đặc điểm của một tập hợp.
Cách tạo bộ sưu tập
Để tạo một bộ sưu tập mới, có hai tùy chọn:bạn có thể tạo bộ sưu tập ẩn hoặc rõ ràng.
Như với cơ sở dữ liệu, MongoDB có thể tự động tạo các bộ sưu tập lần đầu tiên khi một tài liệu được ghi vào chúng. Phương thức này yêu cầu MongoDB tạo một bộ sưu tập mới bằng cách chèn một tài liệu vào một bộ sưu tập chưa tồn tại.
Ví dụ:chúng ta có thể thay đổi trở lại playground
cơ sở dữ liệu mà chúng tôi đã quan tâm trước đó. Khi chúng ta đã ở trong không gian tên đó, chúng ta có thể chèn một tài liệu mới vào một bộ sưu tập bằng cách gọi insert.()
vào tên mà chúng tôi muốn sử dụng cho bộ sưu tập mới. Tại đây, chúng ta có thể tạo tài liệu về một trang chiếu trong bộ sưu tập mới có tên là equipment
:
use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })
Kết quả đầu ra chỉ ra rằng một tài liệu đã được viết. Lệnh trên thực hiện ba hành động riêng biệt. Đầu tiên, MongoDB tạo playground
cơ sở dữ liệu mà chúng tôi đã tham chiếu trong use
của chúng tôi yêu cầu. Nó cũng tạo ra equipment
bộ sưu tập trong cơ sở dữ liệu vì chúng tôi gọi insert()
lệnh trên tên bộ sưu tập đó. Cuối cùng, nó tạo ra tài liệu thực trong equipment
bộ sưu tập bằng cách sử dụng đầu vào mà chúng tôi đã cung cấp cho insert()
lệnh.
Bạn có thể xác minh rằng tất cả các hành động này đã được thực hiện bằng các lệnh sau:
show dbsshow collectionsdb.equipment.count()db.equipment.find()
Kết quả đầu ra phải cho thấy rằng playground
cơ sở dữ liệu hiện nằm trong số các cơ sở dữ liệu được liệt kê, mà equipment
bộ sưu tập được liệt kê, rằng có một tài liệu trong equipement
bộ sưu tập và tài liệu đó là {name: "slide"}
tài liệu chúng tôi đã chèn trong lệnh.
Tùy chọn khác để sử dụng để tạo bộ sưu tập là sử dụng rõ ràng db.createCollection()
phương pháp. Điều này cho phép bạn tạo bộ sưu tập mà không cần thêm bất kỳ tài liệu nào vào chúng.
Ví dụ:bạn có thể tạo một bộ sưu tập mới trong playground
cơ sở dữ liệu được gọi là maintenance.requests
bằng cách gõ:
db.createCollection("maintenance.requests")
{ "ok" : 1}
Chúng tôi có thể xác minh rằng bộ sưu tập mới hiển thị khi chúng tôi truy vấn nó, nhưng bộ sưu tập không có tài liệu:
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0
db.createCollection()
phương pháp này chủ yếu hữu ích vì nó cho phép bạn chỉ định các tùy chọn khác nhau khi tạo. Ví dụ:chúng tôi có thể muốn tạo một bộ sưu tập có giới hạn , là bộ sưu tập duy trì giới hạn trên về kích thước được phân bổ mà nó lưu trữ bằng cách xóa tài liệu cũ nhất khi đầy.
Để tạo một bộ sưu tập có giới hạn được gọi là notifications
có thể lưu trữ tối đa 10240 byte thông tin, bạn có thể gọi:
db.createCollection( "notifications", { capped: true, size: 10240 })
{ "ok" : 1}
Điều này sẽ tạo ra một notifications
có giới hạn bộ sưu tập mà chúng tôi có thể xác minh bằng cách nhập:
db.getCollecitonInfos({"options.capped": true})
[ { "name" : "notifications", "type" : "collection", "options" : { "capped" : true, "size" : 10240 }, "info" : { "readOnly" : false, "uuid" : UUID("dff7bfb0-1cfc-4170-ba60-fbb834ac6925") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Cách xóa bộ sưu tập
Để xóa một bộ sưu tập, bạn có thể sử dụng drop()
trên chính bộ sưu tập.
Ví dụ:để bỏ notifications
có giới hạn bộ sưu tập chúng tôi đã tạo, bạn có thể nhập:
db.notifications.drop()
true
Bạn có thể xác minh rằng thao tác đã thành công bằng cách liệt kê lại các bộ sưu tập trong cơ sở dữ liệu hiện tại:
show collections
equipmentmaintenance.requests
Cách xóa cơ sở dữ liệu
Để xóa toàn bộ cơ sở dữ liệu, hãy gọi db.dropDatabase()
yêu cầu. Thao tác này sẽ xóa cơ sở dữ liệu hiện tại, vì vậy hãy đảm bảo rằng bạn đang ở trên cơ sở dữ liệu chính xác trước khi thực thi:
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }
Nếu bạn kiểm tra danh sách cơ sở dữ liệu có sẵn, playground
không còn được hiển thị:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Vì chúng tôi chưa chuyển sang cơ sở dữ liệu mới nên MongoDB vẫn được thiết lập để tạo playground
cơ sở dữ liệu chúng ta nên chọn để thêm một bộ sưu tập hoặc tài liệu mới. Bạn có thể xác minh điều này bằng db
lệnh:
db
playground
Kết luận
Tạo và quản lý cơ sở dữ liệu và bộ sưu tập là một kỹ năng quan trọng khi sử dụng MongoDB. Các công cụ tổ chức cơ bản này cho phép bạn nhóm các tài liệu liên quan lại với nhau, truy vấn các tập hợp con thông tin và thiết lập chính sách ủy quyền cho các loại dữ liệu khác nhau. Làm quen với cách quản lý hiệu quả các cấu trúc này sẽ cho phép bạn quản lý dữ liệu của mình hiệu quả hơn với ít bất ngờ hơn.