Отчетность по всем базам данных с указанием размеров их коллекций в MongoDB

#mongodb #collections #size

Вопрос:

Я пытаюсь найти каждую коллекцию в каждой базе данных, размер которой превышает 1 ГБ в MongoDB, и напечатать имя базы данных, название коллекции, размер коллекции. Я написал для него javascript, он работает на mongo, у которого меньше баз данных, но он отключает mongo, когда пробует сценарий на производстве. Похоже, запрос не очень эффективен с точки зрения производительности.

Вот javascript, который я написал:

 db.getMongo().getDBNames().forEach(function(dbName){  db.getMongo().getDB(dbName).getCollectionNames().forEach(function(collName){  var coll = db.getMongo().getDB(dbName).getCollection(collName);  var collSize = coll.stats(1024*1024*1024).storageSize;  if (collSize gt; 1) {  print(dbName   ":"   collName   ":"   collSize);  }  }) })  

Есть ли способ его улучшить?

Спасибо

Ответ №1:

Это происходит из mongosh mongo оболочки или:

 var dbNames = db.adminCommand({ listDatabases: 1, nameOnly: true })["databases"].map(d =gt; d.name); for (let dbname of dbNames) {  db.getSiblingDB(dbname)  .getCollectionNames()  .forEach(coll =gt; {   let size = db.getCollection(coll).stats(1024*1024*1024).storageSize;   if (size gt; 1)   print(dbname   " : "   coll   " : "   size);   }); };  

Комментарии:

1. Спасибо за ответ, но когда я запускаю этот скрипт без выбора какой-либо базы данных, он возвращает 0 для всех размеров коллекции баз данных. Когда я меняю базу данных при входе в монго, она правильно возвращает размеры.

2. При запуске оболочки mongo используется база данных по умолчанию test . Вы можете узнать это, набрав db текст . Я попробовал код из test базы данных по умолчанию, а также перешел в другую базу данных ( use other_db ) с теми же результатами. Конечно, базы данных и коллекции, которые у меня были, были небольшого размера и всего несколько десятков, и я использовал size = db.getCollection(coll).stats().storageSize их .

3. Пожалуйста, расскажите об информации о кластере (версия MongoDB и тип кластера). Также сообщите, включена ли аутентификация и в таком случае, какие привилегии имеет пользователь при выполнении вышеуказанных команд. Обратите внимание, что я запускаю сценарий из автономного MongoDB версии 4.2.8 с отключенной аутентификацией.

4. Здравствуйте, я тоже попробовал это на некластерном Монго, это наша тестовая среда. Как вы сказали, база данных по умолчанию-тестовая. Я также запускаю сценарий на этом Mongo, который находится на версии 4.0.27, то же самое. Все данные предназначены для коллекций тестовых баз данных, я собираюсь опубликовать результат в качестве нового ответа, не могу сделать это здесь. Я запускаю mongo с опцией —authenticationDatabase=»администратор», кстати