Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

วิธีวนลูปผ่านทุก Database ใน MongoDB Shell

ใช้ getSiblingDB("admin") และ runCommand({ listDatabases: 1 }) เพื่อดึงรายชื่อ database ทั้งหมด แล้ววนลูปเข้าถึงแต่ละอัน

ขั้นตอนการทำงาน

1. สลับไป database admin และดึงรายชื่อ database

> switchDatabaseAdmin = db.getSiblingDB("admin");
> allDatabaseName = switchDatabaseAdmin.runCommand({ "listDatabases": 1 }).databases;

2. ผลลัพธ์: Array ของ Database Objects

[
    { "name" : "admin", "sizeOnDisk" : 495616, "empty" : false },
    { "name" : "config", "sizeOnDisk" : 98304, "empty" : false },
    { "name" : "local", "sizeOnDisk" : 73728, "empty" : false },
    { "name" : "sample", "sizeOnDisk" : 1335296, "empty" : false },
    { "name" : "sampleDemo", "sizeOnDisk" : 278528, "empty" : false },
    { "name" : "studentSearch", "sizeOnDisk" : 262144, "empty" : false },
    { "name" : "test", "sizeOnDisk" : 8724480, "empty" : false }
]

วนลูปเข้าถึงแต่ละ Database

allDatabaseName.forEach(function(dbInfo) {
    var db = db.getSiblingDB(dbInfo.name);
    // ทำงานกับ database นี้ได้แล้ว
    print("Database: " + dbInfo.name);
    print("Collections: " + db.getCollectionNames());
});

คำสั่งที่มีประโยชน์ภายใน Loop

  • db.getCollectionNames() - รายชื่อคอลเลกชัน
  • db.stats() - สถิติ database
  • db.runCommand({ dbStats: 1 }) - สถิติรายละเอียด
  • db.getCollection(name).countDocuments() - นับเอกสารแต่ละคอลเลกชัน

กรณีใช้งาน

  • Backup script ทุก database
  • Health check / Monitoring
  • Cleanup old databases
  • Audit permissions

ข้อควรระวัง

  • ต้องมีสิทธิ์ admin (role: userAdminAnyDatabase หรือ root)
  • Database admin, config, local เป็น system databases
  • Loop อาจช้าถ้ามี database เยอะ ขนาดใหญ่

สรุป

ใช้ db.getSiblingDB("admin").runCommand({ listDatabases: 1 }) เพื่อดึงรายชื่อ database ทั้งหมด แล้ววนลูปด้วย forEach และ getSiblingDB(name) เพื่อเข้าถึงแต่ละ database