Giới thiệu
Để lấy danh sách tất cả database trong MongoDB và lưu vào một mảng JavaScript, bạn sử dụng lệnh runCommand({ listDatabases: 1 }) trên database admin.
Quy trình thực hiện
1. Chuyển sang database admin
> use admin;
switched to db admin
2. Chạy listDatabases command
> var tatCaDatabase = db.runCommand({ listDatabases: 1 });
3. Kết quả trả về object chứa mảng databases
{
"databases" : [
{ "name" : "admin", "sizeOnDisk" : 847872, "empty" : false },
{ "name" : "config", "sizeOnDisk" : 98304, "empty" : false },
{ "name" : "local", "sizeOnDisk" : 73728, "empty" : false },
{ "name" : "sample", "sizeOnDisk" : 1273856, "empty" : false },
{ "name" : "sampleDemo", "sizeOnDisk" : 352256, "empty" : false },
{ "name" : "studentSearch", "sizeOnDisk" : 262144, "empty" : false },
{ "name" : "test", "sizeOnDisk" : 9527296, "empty" : false }
],
"totalSize" : 12435456,
"ok" : 1
}
4. Trích xuất tên database vào mảng
> var tenDatabases = [];
> for (var i in tatCaDatabase.databases) {
tenDatabases.push(tatCaDatabase.databases[i].name);
}
5. Kết quả mảng tên database
> tenDatabases;
[ "admin", "config", "local", "sample", "sampleDemo", "studentSearch", "test" ]
Cách viết gọn hơn (Modern JavaScript)
// Arrow function + map
const tenDatabases = tatCaDatabase.databases.map(db => db.name);
// Hoặc destructuring
const { databases } = db.runCommand({ listDatabases: 1 });
const tenDatabases = databases.map(({ name }) => name);
Sử dụng trong script MongoDB Shell
// File: list_dbs.js
use admin;
const { databases } = db.runCommand({ listDatabases: 1 });
const dbNames = databases.map(({ name, sizeOnDisk, empty }) => ({ name, sizeOnDisk, empty }));
print("Danh sách database:");
dbNames.forEach(db => {
print(`${db.name} - ${(db.sizeOnDisk / 1024 / 1024).toFixed(2)} MB - ${db.empty ? 'Empty' : 'Has data'}`);
});
Chạy: mongo list_dbs.js
Lưu ý
- Phải chạy trên database
admin - Yêu cầu quyền
listDatabases(builtin role:clusterMonitorhoặcroot) - Database
localvàconfiglà system databases - Kích thước
sizeOnDisktính bằng bytes
Trong Application (Node.js driver)
const adminDb = client.db('admin');
const result = await adminDb.command({ listDatabases: 1 });
const dbNames = result.databases.map(db => db.name);