MongoDB là một môi trường cơ sở dữ liệu tài liệu mã nguồn mở, đa nền tảng. MongoDB sử dụng các tài liệu giống như JSON, không có sơ đồ. Hơn một tài liệu tạo thành một tập hợp, và một hoặc nhiều tập hợp có thể có trong một cơ sở dữ liệu MongoDB. Trong chương này, chúng ta sẽ học cách tạo một cơ sở dữ liệu MongoDB với một ứng dụng Node.js.
Phần mềm quản lý cơ sở dữ liệu MongoDB có sẵn trong ba phiên bản sau:
MongoDB Community − Phiên bản MongoDB có mã nguồn mở, miễn phí sử dụng và tự quản lý, có sẵn để cài đặt tại chỗ, hỗ trợ cho Windows, Linux và macOS.
MongoDB Enterprise − Một phiên bản MongoDB thương mại, dựa trên đăng ký, được tự quản lý, với nhiều tính năng nâng cao hơn so với phiên bản cộng đồng.
MongoDB Atlas − Một dịch vụ quản lý hoàn toàn theo yêu cầu cho các triển khai MongoDB trên đám mây. Nó chạy trên AWS, Microsoft Azure và Google Cloud Platform.
Trình điều khiển mongodb cho Node.js được nhập vào mã bằng cách sử dụng hàm require(). Đối tượng của lớp MongoClient đại diện cho một kết nối cơ sở dữ liệu. Bạn cần truyền một chuỗi kết nối vào bộ tạo của nó.
const { MongoClient } = require('mongodb'); const client = new MongoClient(ConnectionString);
Chuỗi kết nối MongoDB phải có một trong các định dạng sau −
Standard Connection String Format − Định dạng này được sử dụng để kết nối với một triển khai MongoDB tự lưu trữ độc lập, tập hợp bản sao hoặc cụm phân mảnh. Cách thức kết nối URI tiêu chuẩn có dạng −
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
Chuỗi kết nối mặc định là −
mongodb://localhost:27017/
SRV Connection Format − Một chuỗi kết nối với tên máy chủ tương ứng với bản ghi DNS SRV. MongoDB Atlas sử dụng định dạng kết nối SRV. MongoDB hỗ trợ danh sách hạt giống được xây dựng từ DNS. Điều này cho phép linh hoạt hơn trong việc triển khai và khả năng thay đổi các máy chủ theo chu kỳ mà không cần cấu hình lại các khách hàng. Sơ đồ kết nối URI SRV có dạng sau −
mongodb+srv://[username:password@]host[/[defaultauthdb][?options]]
Dưới đây là một ví dụ về chuỗi kết nối SRV −
const uri = "mongodb+srv://user:pwd@cluster0.zhmrg1h.mongodb.net/?retryWrites=true&w=majority";
Trong ví dụ dưới đây, chúng tôi đang sử dụng chuỗi kết nối chuẩn để lấy danh sách các cơ sở dữ liệu.
Phương thức connect() của đối tượng MongoClient trả về một Promise. Lời gọi đến phương thức connect() là không đồng bộ. Tiếp theo, một hàm listdatabases() được gọi.
const { MongoClient } = require('mongodb'); async function main() { const uri = "mongodb://localhost:27017/"; const client = new MongoClient(uri); try { // Connect to the MongoDB cluster await client.connect(); // Make the appropriate DB calls await listDatabases(client); } catch (e) { console.error(e); } finally { // Close the connection to the MongoDB cluster await client.close(); } } main().catch(console.error); async function listDatabases(client) { databasesList = await client.db().admin().listDatabases(); console.log("Databases:"); databasesList.databases.forEach(db => console.log(` - ${db.name}`)); };
Databases: - admin - config - local - myProject - mydb
Để tạo một cơ sở dữ liệu mới trên máy chủ, bạn cần gọi phương thức db() của lớp MongoClient.
var dbobj = client.db(database_name, options);
Phương thức db() trả về một phiên bản db đại diện cho cơ sở dữ liệu trên máy chủ. Trong ví dụ sau, chúng tôi đã trình bày cách tạo một cơ sở dữ liệu mới có tên là mydatabase trong MongoDB.
const {MongoClient} = require('mongodb'); async function main(){ const uri = "mongodb://localhost:27017/mydb"; const client = new MongoClient(uri); try { // Connect to the MongoDB cluster await client.connect(); await createdb(client, "mydatabase"); } finally { // Close the connection to the MongoDB cluster await client.close(); } } main().catch(console.error); async function createdb(client, dbname){ const dbobj = await client.db(dbname); console.log("Database created"); console.log(dbobj); }
Tuy nhiên, hãy lưu ý rằng cơ sở dữ liệu không được tạo ra vật lý trên máy chủ cho đến khi ít nhất một bộ sưu tập được tạo ra và phải có ít nhất một tài liệu trong đó.