สามารถใช้ getCollectionNames() ร่วมกับ forEach() เพื่อวนลูปผ่านทุกคอลเลกชันในฐานข้อมูลปัจจุบันและรันคำสั่งที่ต้องการ
รูปแบบคำสั่ง
db.getCollectionNames().forEach(function(collectionName) {
var latestDoc = db[collectionName].find().sort({_id: -1}).limit(1);
if (latestDoc.hasNext()) {
printjson(latestDoc.next()._id.getTimestamp());
}
});
คำอธิบาย
db.getCollectionNames()- ดึงรายชื่อคอลเลกชันทั้งหมดforEach()- วนลูปแต่ละคอลเลกชันdb[collectionName]- เข้าถึงคอลเลกชันโดยใช้ชื่อจากตัวแปรsort({_id: -1}).limit(1)- ดึงเอกสารล่าสุด (ObjectId มี timestamp ตัวแรก)_id.getTimestamp()- แปลง ObjectId เป็นวันที่/เวลา
ตัวอย่างผลลัพธ์
ISODate("2019-02-21T18:52:43Z")
ISODate("2019-03-19T17:49:00Z")
ISODate("2019-03-06T15:40:12Z")
ISODate("2019-03-15T16:31:50Z")
ISODate("2019-02-21T15:40:52Z")
... (ต่อไป)
กรณีใช้งานทั่วไป
- ตรวจสอบเอกสารล่าสุดของทุกคอลเลกชัน
- รันคำสั่ง maintenance ทุกคอลเลกชัน
- สถิติข้อมูลแบบรวมทั้ง database
ข้อควรระวัง
คำสั่งนี้อาจใช้เวลานานถ้ามีคอลเลกชันเยอะหรือข้อมูลมาก ควรทดสอบในสภาพแวดล้อมพัฒนาก่อน