Як я можу перерахувати всі колекції в оболонці MongoDB?


757

Як я можу перерахувати всі колекції для поточної бази даних, яку я використовую, в оболонці MongoDB?

Відповіді:


1157

Ви можете зробити...

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
Ви не можете використовувати вихідні колекції шоу в сценарії, але можна зробити x = db.getCollectionNames (), щоб отримати масив усіх імен.
четерас

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є дуже корисним для тих, хто надходить із реляційного dbms.
Джефф Пукетт

9
nope, useце використовувати базу даних, нічого спільного з колекціями
sjmeverett

1
ми також можемо використовувати db.collections
Біплаб Малакар


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: Як це так? Виходячи з інших відповідей, це відповідна відповідь для цього, що насправді може спрацювати. Принаймні, це спроба відповісти. Що це таке - це відповідь на дуже старе запитання, на яке вже розміщено кілька правильних відповідей.
Roope Hakulinen

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

Для отримання додаткової інформації відвідайте розділ Початок роботи .


11

Якщо ви хочете показати всі колекції з оболонки MongoDB (командного рядка), використовуйте помічник оболонки,

show collections

що показує всі колекції для поточної бази даних. Якщо ви хочете отримати зі своєї програми всі списки колекцій, тоді ви можете скористатися методом бази даних MongoDB

db.getCollectionNames()

Для отримання додаткової інформації про помічник оболонки MongoDB, ви можете ознайомитись з mongoкороткою довідкою Shell .


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

Примітка. Це дуже добре працює як однолінійний. (Але це виглядає жахливо на Stack Overflow.)

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.x ви можете зробити

db.getCollectionNames()

1
Як зазначав @JohnnyHK , це стосується лише драйвера вузла, а не оболонки монго за запитанням про ОП
Джефф Пукетт

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

Приклад: Знайдіть всю колекцію, що має імпорт "імпорт"

db.getCollectionNames().filter(function (CollectionName) { return /import/.test(CollectionName) })

Чи можу я отримати список колекції, який містить якусь назву, як фільтр
Парвен

@Praveen - я оновив свою відповідь, щоб включити відповідь до вашої справи. Сподіваюсь, що це допомагає
Амітеш

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

-1

Використовуйте таку команду з mongoоболонки:

show collections

якщо ви покладете свою команду на задній план, погано проголосуйте за -1.
блам

Чим це відрізняється від попередніх відповідей?
Пітер Мортенсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.