ใช้คำสั่ง listDatabases ผ่าน database admin แล้ววนลูปดึงชื่อคอลเลกชันจากแต่ละ database
ขั้นตอนการทำงาน
1. สลับไปที่ database admin และดึงรายชื่อ database ทั้งหมด
> switchDatabaseAdmin = db.getSiblingDB("admin");
> allDatabaseName = switchDatabaseAdmin.runCommand({ "listDatabases": 1 }).databases;
2. วนลูปแต่ละ database เพื่อดึงชื่อคอลเลกชัน
> allDatabaseName.forEach(function(databaseName) {
db = db.getSiblingDB(databaseName.name);
collectionName = db.getCollectionNames();
collectionName.forEach(function(collectionName) {
print(collectionName);
});
});
ตัวอย่างผลลัพธ์
จะแสดงรายชื่อคอลเลกชันทุกตัวจากทุก database ต่อเนื่องกัน:
clearingItemsInNestedArrayDemo
customIdDemo
deleteRecordDemo
documentExistsOrNotDemo
findAllExceptFromOneOrtwoDemo
mongoExportDemo
startup_log
arraySizeErrorDemo
basicInformationDemo
... (และอื่นๆ อีกมาก)
คำอธิบายคำสั่งสำคัญ
db.getSiblingDB("admin")- เชื่อมต่อไปยัง database adminrunCommand({ "listDatabases": 1 })- รันคำสั่งรายชื่อ databasedb.getSiblingDB(name)- สลับ context ไปยัง database ที่ระบุdb.getCollectionNames()- ดึงรายชื่อคอลเลกชันใน database ปัจจุบัน
กรณีใช้งาน
- Audit ฐานข้อมูลทั้งหมด
- หาคอลเลกชันที่ชื่อซ้ำข้าม database
- สคริปต์ backup/migration แบบอัตโนมัติ
สรุป
ต้องผ่าน database admin ก่อน แล้ววนลูปแต่ละ database ด้วย getSiblingDB() และ getCollectionNames() เพื่อดึงรายชื่อคอลเลกชันทั้งหมด