#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=»администратор», кстати