Как я могу перечислить все коллекции в оболочке 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

Хорошая особенность. Вы можете перебирать массив имен, чтобы сделать что-то еще (например, удалить все элементы из коллекций).
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).


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


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.


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


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

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


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);
});

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


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 после переключения на базу данных.


1

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

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




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) })

Могу ли я получить список коллекции, которая содержит какое-то имя, например фильтр
Парвин

@Praveen - я обновил свой ответ, чтобы включить ответ на ваш случай. Надеюсь, что это помогает
Амитеш

Спасибо, Амитеш. Я написал свой сценарий db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("удаление индекса для" + collName); db.getCollection (collName) .dropIndex (") ts_1 ");}});
Парвин

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.