Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cách kiểm tra database MongoDB có tồn tại không

Giới thiệu

MongoDB không có lệnh trực tiếp kiểu "IF DATABASE EXISTS". Tuy nhiên, bạn có thể kiểm tra bằng cách lấy danh sách database và tìm index của tên database trong mảng đó.

Cú pháp

db.getMongo().getDBNames().indexOf("tenDatabase");

Trả về:

  • Index >= 0: Database tồn tại (vị trí trong mảng, tính từ 0)
  • -1: Database không tồn tại

Ví dụ minh họa

Trường hợp 1: Database "test" tồn tại

> db.getMongo().getDBNames().indexOf("test");
6

Kiểm tra với show dbs

> show dbs;
admin       0.001GB
config      0.000GB
local       0.000GB
sample      0.001GB
sampleDemo  0.000GB
studentSearch 0.000GB
test        0.009GB

Database "test" nằm ở index 6 (tính từ 0), khớp với kết quả indexOf.

Trường hợp 2: Database "education" KHÔNG tồn tại

> db.getMongo().getDBNames().indexOf("education");
-1

Các cách kiểm tra khác

Cách 1: Dùng listDatabases command (chi tiết hơn)

> use admin;
switched to db admin
> db.runCommand({ listDatabases: 1 }).databases.map(function(d) { return d.name; }).indexOf("test");
6

Cách 2: Trong script JavaScript (mongo shell)

function databaseExists(dbName) {
    return db.getMongo().getDBNames().indexOf(dbName) !== -1;
}

// Sử dụng
if (databaseExists("test")) {
    print("Database 'test' tồn tại");
} else {
    print("Database 'test' KHÔNG tồn tại");
}

Cách 3: Thử use database (tự tạo nếu không có)

> use test;
// Nếu db không tồn tại, MongoDB sẽ tạo khi có write operation đầu tiên
// Đây KHÔNG phải cách kiểm tra, chỉ là cách truy cập

Lưu ý quan trọng

  • MongoDB tạo database lười biếng (lazy) - chỉ tạo khi có dữ liệu đầu tiên được ghi
  • Database rỗng (không có collection) không hiển thị trong show dbs
  • db.getMongo().getDBNames() chỉ trả về database đã có dữ liệu
  • Để kiểm tra trong application, dùng driver method: client.listDatabases()

Best Practice trong Application

// Node.js driver example
async function checkDatabaseExists(client, dbName) {
    const adminDb = client.db('admin');
    const result = await adminDb.command({ listDatabases: 1 });
    return result.databases.some(db => db.name === dbName);
}