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);
}