Как я могу перечислить все коллекции в оболочке MongoDB?

758

В оболочке MongoDB, как мне перечислить все коллекции для текущей базы данных, которую я использую?

Кофемолка
источник

Ответы:

1160

Ты можешь сделать...

JavaScript (оболочка):

db.getCollectionNames()

Node.js:

db.listCollections()

Не JavaScript (только оболочка):

show collections

Причина, по которой я называю это не-JavaScript, заключается в том, что:

$ mongo prodmongo/app --eval "show collections"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
2016-10-26T19:34:34.886-0400 E QUERY    [thread1] SyntaxError: missing ; before statement @(shell eval):1:5

$ mongo prodmongo/app --eval "db.getCollectionNames()"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
[
    "Profiles",
    "Unit_Info"
]

Если вы действительно хотите этот сладкий, сладкий show collectionsвывод, вы можете:

$ mongo prodmongo/app --eval "db.getCollectionNames().join('\n')"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
Profiles
Unit_Info
AdaTheDev
источник
Хорошая особенность. Вы можете перебирать массив имен, чтобы сделать что-то еще (например, удалить все элементы из коллекций).
Hilton Perantunes
6
Можем ли мы получить db.listCollections()ответ, показанный здесь и отмеченный зеленым? В противном случае люди делают ту же ошибку, которую я делал бесчисленное количество раз, когда они приходят к этому ответу - и пытаются использовать, db.getCollectionNamesи ошибка возвращается db.collectionNames is not a function.
niftylettuce
22
@niftylettuce Этот вопрос касается оболочки MongoDB, а не драйвера node.js. db.getCollectionNames()все еще правильный ответ для оболочки.
JohnnyHK
424
> show collections

выведет список всех коллекций в выбранной в данный момент БД, как указано в справке командной строки ( help).

Cameron
источник
2
Вы не можете использовать выходные данные show collection в скрипте, но можно сделать x = db.getCollectionNames (), чтобы получить массив всех имен.
ceteras
1
Что означают два числа, перечисленные после каждой коллекции? Два типа размеров? content 1145.586MB / 1506.855MBнапример.
Дан Даскалеску
@Dan: я давно не пользовался MongoDB, но я думаю, что это размер данных, хранящихся в коллекции, в сравнении с общим объемом, выделенным для этой коллекции (для обработки незначительных обновлений и роста без необходимости постоянного перераспределения новое пространство для всего содержимого коллекции).
Кэмерон
265

Как мне перечислить все коллекции для текущей базы данных, которую я использую?

Три метода

  • show collections
  • show tables
  • db.getCollectionNames()

Чтобы перечислить все базы данных :

show dbs

Чтобы войти или использовать данную базу данных:

use databasename

Чтобы перечислить все коллекции :

show collections

Вывод:

collection1
collection2
system.indexes

(или)

show tables

Вывод:

collection1
collection2
system.indexes

(или)

db.getCollectionNames()

Вывод:

[ "collection1", "collection2", "system.indexes" ]

Для ввода или использования данной коллекции

use collectionname
Бхарадваджа Бапатла
источник
1
+1 за самый полный ответ. Иллюстрирование show tablesвесьма полезно для тех, кто приходит с реляционного фона БДМ.
Джефф Пукетт
9
Нет, useэто использовать базу данных, ничего общего с коллекциями
sjmeverett
1
мы также можем использовать db.collections
Biplab Malakar
53

> show tables

Это дает тот же результат, что и ответ Кэмерон.

Кевин Мередит
источник
30

Помимо вариантов, предложенных другими людьми:

show collections  // Output every collection
show tables
db.getCollectionNames() // Shows all collections as a list

Существует также другой способ, который может быть очень полезен, если вы хотите знать, как создавалась каждая из коллекций (например, это ограниченная коллекция с определенным размером):

db.system.namespaces.find()
Сальвадор Дали
источник
23

Сначала вам нужно использовать базу данных, чтобы показать все коллекции / таблицы внутри нее.

>show dbs
users 0.56787GB
test (empty)
>db.test.help() // this will give you all the function which can be used with this db
>use users
>show tables //will show all the collection in the db
Тарун Гупта
источник
15

Вы можете использовать show tablesили show collections.

LXG
источник
2
@LalitKumarB: Почему это так? Основываясь на других ответах, это подходящий ответ для этого, который на самом деле может работать. По крайней мере, это попытка ответить. Что это, так это ответ на очень старый вопрос, на который уже выложено несколько правильных ответов.
Руп Хакулинен
14

Пытаться:

help // To show all help methods
show dbs  // To show all dbs
use dbname  // To select your db
show collections // To show all collections in selected db
Индраджит Сингх
источник
12

Команда, используемая для отображения всех коллекций в базе данных MongoDB:

show collections

Перед запуском show collectionsкоманды вы должны выбрать базу данных:

use mydb // mydb is the name of the database being selected

Чтобы увидеть все базы данных, вы можете использовать команду

show dbs // Shows all the database names present

Для получения дополнительной информации посетите страницу Начало работы .

KKK
источник
11

Если вы хотите показать все коллекции из оболочки MongoDB (командная строка), используйте помощник оболочки,

show collections

который показывает все коллекции для текущей базы данных. Если вы хотите получить все списки коллекций из вашего приложения, вы можете использовать метод базы данных MongoDB

db.getCollectionNames()

Дополнительную информацию о помощнике оболочки MongoDB вы можете найти в mongoКратком справочнике по оболочке .

Энгр. Хасануззаман Сумон
источник
11

Следующие команды на mongoshell являются общими.

show databases
show collections

Также,

show dbs
use mydb
db.getCollectionNames()

Иногда полезно просмотреть все коллекции, а также индексы коллекций, которые являются частью общего пространства имен:

Вот как бы вы это сделали:

db.getCollectionNames().forEach(function(collection) {
    indexes = db[collection].getIndexes();
    print("Indexes for " + collection + ":");
    printjson(indexes);
});

Между тремя командами и этим фрагментом вы должны быть хорошо прикрыты!

Sood
источник
8

Я думаю, что одно из самых больших заблуждений - это разница между тем, что вы можете сделать mongo(или интерактивной / гибридной оболочкой), и mongo --eval(или чистой оболочкой JavaScript). Я держу эти полезные документы под рукой:

Вот пример сценариев того, что вы могли бы иначе сделать с showкомандами:

# List all databases and the collections in them

mongo --eval "
    db.getMongo().getDBNames().forEach(
        function(v, i){
            print(
                v + '\n\t' +
                db.getSiblingDB(v).getCollectionNames().join('\n\t')
            )
        }
    )
"

Примечание: это действительно хорошо работает как однострочник. (Но это выглядит ужасно при переполнении стека.)

mongo --eval "db.getMongo().getDBNames().forEach(function(v, i){print(v+'\n\t'+db.getSiblingDB(v).getCollectionNames().join('\n\t'))})"
Бруно Броноски
источник
Это очень полезно, спасибо.
Марко Кравейро
4

На> = 2.x вы можете сделать

db.listCollections()

На 1.х можно сделать

db.getCollectionNames()
Анируддх Джоши
источник
1
как отметил @JohnnyHK , это относится только к драйверу узла, а не к монго-оболочке для каждого вопроса OP
Джефф Пукетт
@JeffPuckettII Я не использую Node. Это прекрасно работает для меня внутри оболочки монго. Интересно, почему бы и нет?
Анируддх Джоши
1
Я использую версию оболочки MongoDB: 3.2.6, и когда я запускаю, db.getCollectionNames()я получаю, [ "users" ]потому что у меня есть коллекция пользователей. Если я попробую, db.listCollections()то это приведет к[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Джефф Пукетт
3

Список всех коллекций из mongoоболочки:

  • db.getCollectionNames ()
  • показать коллекции
  • показать таблицы

Примечание: Коллекции будут показывать из текущей базы данных , где вы находитесь в данный момент

Хасиб Камаль
источник
Чем это отличается от предыдущих ответов?
Питер Мортенсен
3

Для переключения на базу данных.

По:

используйте пример {your_database_name} :

use friends

где friendsимя вашей базы данных.

Затем написать:

db.getCollectionNames()
show collections

Это даст вам название коллекции.

Шашикант Пандит
источник
Чем это отличается от предыдущих ответов?
Питер Мортенсен
2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • соединиться с базой данных MongoDB используя mongo. Это запустит соединение.
  • тогда беги show dbs команду. Это покажет вам все существующие / доступные базы данных.
  • затем выберите databaseнужный. В приведенном выше это anuradhfirst. Тогда беги use anuradhfirst. Это переключится на базу данных, которую вы хотите.
  • затем выполните show collectionsкоманду. Это покажет все collectionsвнутри выбранной вами базы данных.
Кальдера Чанака
источник
1

показать коллекции

Эта команда обычно работает в оболочке MongoDB после переключения на базу данных.

PHINCY L PIOUS
источник
1

Для развертываний MongoDB 3.0 с использованием механизма хранения WiredTiger, если вы используете db.getCollectionNames()версию оболочки mongo до 3.0 или версию драйвера до версии, совместимой с 3.0, db.getCollectionNames()не вернет никаких данных, даже если существуют существующие коллекции.

Для получения более подробной информации, пожалуйста, обратитесь к этому .

Рахул
источник
Связанный мета пост .
Питер Мортенсен
0
show collections

или

show tables

или

db.getCollectionNames();
nixxo_raa
источник
Чем это отличается от предыдущих ответов?
Питер Мортенсен
ничего, кроме улучшения моего аккаунта.
nixxo_raa
0

Я использую listCollections(поддерживает MongoDB 3.0 и выше) для этой цели.

Пример:

db.runCommand({ listCollections: 1, filter: {}, nameOnly: true });

Чтобы получить больше информации, например, индекс коллекции:

db.runCommand({ listCollections: 1, filter: {}, nameOnly: false });

Чтобы напечатать только имена коллекций:

db.runCommand({ listCollections: 1, filter: {}, nameOnly: true }).cursor.firstBatch.forEach(v => {print(v.name)})

Я чувствую, что это обеспечивает большую гибкость.

Подробнее: списокКоллекции

Сахит Вибудхи
источник
0
 1. show collections; // Display all collections
 2. show tables     // Display all collections
 3. db.getCollectionNames();   // Return array of collection. Example :[ "orders", "system.profile" ]

Подробная информация для каждой коллекции:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Для пользователей с требуемым доступом (привилегиями, которые предоставляют действие listCollections для базы данных), метод перечисляет имена всех коллекций для базы данных.
  • Для пользователей без требуемого доступа метод перечисляет только коллекции, для которых у пользователей есть привилегии. Например, если пользователь найдет определенную коллекцию в базе данных, метод вернет только эту коллекцию.

Вывести список коллекций на основе строки поиска.

db.getCollectionNames().filter(function (CollectionName) { return /<Search String>/.test(CollectionName) })

Пример: Найти всю коллекцию с именем "import"

db.getCollectionNames().filter(function (CollectionName) { return /import/.test(CollectionName) })
Amitesh
источник
Могу ли я получить список коллекции, которая содержит какое-то имя, например фильтр
Парвин
@Praveen - я обновил свой ответ, чтобы включить ответ на ваш случай. Надеюсь, что это помогает
Амитеш
Спасибо, Амитеш. Я написал свой сценарий db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("удаление индекса для" + collName); db.getCollection (collName) .dropIndex (") ts_1 ");}});
Парвин
-1

Используйте следующую команду из mongoоболочки:

show collections
Ануп Шарма
источник
если вы поставите свою команду в кавычки, плохо проголосуйте против вашего -1.
болтайте
Чем это отличается от предыдущих ответов?
Питер Мортенсен