Jak mogę wyświetlić listę wszystkich kolekcji w powłoce MongoDB?

757

W jaki sposób w liście MongoDB wyświetlić listę wszystkich kolekcji dla bieżącej bazy danych, której używam?

młynek do kawy
źródło

Odpowiedzi:

1157

Możesz to zrobić...

JavaScript (powłoka):

db.getCollectionNames()

Node.js:

db.listCollections()

Non-JavaScript (tylko powłoka):

show collections

Powodem, dla którego nazywam to nie JavaScript, jest to, że:

$ 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"
]

Jeśli naprawdę chcesz tej słodkiej, słodkiej show collectionsmocy, możesz:

$ mongo prodmongo/app --eval "db.getCollectionNames().join('\n')"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
Profiles
Unit_Info
AdaTheDev
źródło
Fajna funkcja. Możesz iterować tablicę nazw, aby zrobić coś innego (np. Usunąć wszystkie elementy ze zbiorów).
Hilton Perantunes,
6
Czy możemy otrzymać db.listCollections()jako odpowiedź pokazaną tutaj i zaznaczoną na zielono? W przeciwnym razie ludzie popełniają ten sam błąd, który popełniłem niezliczoną ilość razy, gdy dochodzą do tej odpowiedzi - i próbują użyć, db.getCollectionNamesa błąd powraca db.collectionNames is not a function.
niftylettuce
22
@niftylettuce To pytanie dotyczy powłoki MongoDB, a nie sterownika node.js. db.getCollectionNames()jest nadal właściwą odpowiedzią dla powłoki.
JohnnyHK
424
> show collections

wyświetli listę wszystkich kolekcji w aktualnie wybranym DB, jak podano w wierszu polecenia help ( help).

Cameron
źródło
2
Nie można użyć danych wyjściowych kolekcji pokazu w skrypcie, ale można wykonać x = db.getCollectionNames (), aby uzyskać tablicę wszystkich nazw.
ceteras
1
Co oznaczają dwie liczby wymienione po każdej kolekcji? Dwa rodzaje rozmiarów? content 1145.586MB / 1506.855MBna przykład.
Dan Dascalescu,
@Dan: Od jakiegoś czasu nie korzystałem z MongoDB, ale przypuszczam, że jest to rozmiar danych przechowywanych w kolekcji w porównaniu z całkowitą kwotą przydzieloną do tej kolekcji (w celu obsługi drobnych aktualizacji i wzrostu bez konieczności ciągłej zmiany lokalizacji nowa przestrzeń dla zawartości całej kolekcji).
Cameron
265

Jak wyświetlić listę wszystkich kolekcji dla bieżącej bazy danych, której używam?

Trzy metody

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

Aby wyświetlić listę wszystkich baz danych :

show dbs

Aby wprowadzić lub użyć danej bazy danych:

use databasename

Aby wyświetlić listę wszystkich kolekcji :

show collections

Wynik:

collection1
collection2
system.indexes

(lub)

show tables

Wynik:

collection1
collection2
system.indexes

(lub)

db.getCollectionNames()

Wynik:

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

Aby wprowadzić lub użyć danej kolekcji

use collectionname
Bharadwaja Bapatla
źródło
1
+1 za najbardziej kompletną odpowiedź. ilustrowanie show tablesjest bardzo pomocne dla osób pochodzących z relacyjnych środowisk dbms.
Jeff Puckett
9
nie, useto korzystać z bazy danych, nie ma to nic wspólnego ze zbiorami
sjmeverett
1
możemy również użyć db.collections
Biplab Malakar
53

> show tables

Daje taki sam wynik jak odpowiedź Camerona.

Kevin Meredith
źródło
30

Oprócz opcji sugerowanych przez inne osoby:

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

Istnieje również inny sposób, który może być naprawdę przydatny, jeśli chcesz wiedzieć, jak każda z kolekcji została utworzona (na przykład jest to kolekcja ograniczona limitem o określonym rozmiarze):

db.system.namespaces.find()
Salvador Dali
źródło
23

Najpierw musisz użyć bazy danych, aby wyświetlić wszystkie kolekcje / tabele w niej zawarte.

>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
Tarun Gupta
źródło
15

Możesz użyć show tableslub show collections.

lxg
źródło
2
@LalitKumarB: Dlaczego to możliwe? Na podstawie innych odpowiedzi jest to odpowiednia odpowiedź na to, co faktycznie może działać. Przynajmniej jest to próba odpowiedzi. To, co to jest, jest odpowiedzią na bardzo stare pytanie, które ma już wiele poprawnych odpowiedzi.
Roope Hakulinen
14

Próbować:

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
Indrajeet Singh
źródło
12

Komenda używana do wyświetlania wszystkich kolekcji w bazie danych MongoDB to

show collections

Przed uruchomieniem show collectionspolecenia musisz wybrać bazę danych:

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

Aby wyświetlić wszystkie bazy danych, możesz użyć polecenia

show dbs // Shows all the database names present

Aby uzyskać więcej informacji, zobacz Wprowadzenie .

kkk
źródło
11

Jeśli chcesz pokazać wszystkie kolekcje z powłoki MongoDB (linia poleceń), użyj pomocnika powłoki,

show collections

który pokazuje wszystkie kolekcje dla bieżącej bazy danych. Jeśli chcesz pobrać wszystkie listy kolekcji ze swojej aplikacji, możesz użyć metody bazy danych MongoDB

db.getCollectionNames()

Aby uzyskać więcej informacji na temat pomocnika powłoki MongoDB, zobacz mongoSkrócone omówienie powłoki .

Engr. Hasanuzzaman Sumon
źródło
11

Następujące polecenia w języku mongoshell są powszechne.

show databases
show collections

Również,

show dbs
use mydb
db.getCollectionNames()

Czasami warto zobaczyć wszystkie kolekcje, a także indeksy kolekcji, które są częścią ogólnej przestrzeni nazw:

Oto jak to zrobiłbyś:

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

Pomiędzy trzema poleceniami a tym fragmentem kodu powinieneś być dobrze zakryty!

Sood
źródło
8

Myślę, że jednym z największych nieporozumień jest różnica między tym, co możesz zrobić z mongo(lub interaktywną / hybrydową powłoką) vs. mongo --eval(lub czystą powłoką JavaScript). Trzymam pod ręką te pomocne dokumenty:

Oto przykład skryptu, który możesz zrobić za pomocą showpoleceń:

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

Uwaga: To działa naprawdę dobrze jako jedna linijka. (Ale wygląda okropnie w przypadku przepełnienia stosu.)

mongo --eval "db.getMongo().getDBNames().forEach(function(v, i){print(v+'\n\t'+db.getSiblingDB(v).getCollectionNames().join('\n\t'))})"
Bruno Bronosky
źródło
To bardzo przydatne, dzięki.
Marco Craveiro
4

On> = 2.x, możesz to zrobić

db.listCollections()

Na 1.x możesz to zrobić

db.getCollectionNames()
Aniruddh Joshi
źródło
1
jak zauważył @JohnnyHK , dotyczy to tylko sterownika węzła, a nie powłoki mangowej na pytanie OP
Jeff Puckett
@JeffPuckettII Nie używam węzła. Działa to dla mnie idealnie w skorupie mangowej. Zastanawiam się, dlaczego tak nie byłoby?
Aniruddh Joshi
1
Używam wersji powłoki MongoDB: 3.2.6, a kiedy uruchamiam db.getCollectionNames(), dostaję, [ "users" ]ponieważ mam kolekcję użytkowników. Jeśli spróbuję, db.listCollections()to skutkuje[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett
3

Wyświetl wszystkie kolekcje z mongopowłoki:

  • db.getCollectionNames ()
  • pokaż kolekcje
  • pokaż tabele

Uwaga: Kolekcje pokażą z bieżącej bazy danych, w której aktualnie się znajdujesz

Hasib Kamal
źródło
Czym różni się to od poprzednich odpowiedzi?
Peter Mortensen
3

Do przełączania do bazy danych.

Przez:

skorzystaj z przykładu {twoja_bazy_danych} :

use friends

gdzie friendsjest nazwa twojej bazy danych.

Następnie napisz:

db.getCollectionNames()
show collections

To da ci nazwę kolekcji.

Shashikant Pandit
źródło
Czym różni się to od poprzednich odpowiedzi?
Peter Mortensen
2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • połączyć się z bazą danych MongoDB za pomocą mongo. To rozpocznie połączenie.
  • następnie uruchom show dbspolecenie. Spowoduje to wyświetlenie wszystkich wychodzących / dostępnych baz danych.
  • następnie wybierz żądany database. W powyższym jest anuradhfirst. Potem biegnij use anuradhfirst. Spowoduje to przejście do wybranej bazy danych.
  • następnie uruchom show collectionspolecenie. Spowoduje to wyświetlenie całej collectionswybranej bazy danych.
Chanaka Caldera
źródło
1

pokaż kolekcje

To polecenie zwykle działa w powłoce MongoDB po przejściu do bazy danych.

PHINCY L PIOUS
źródło
1

W przypadku wdrożeń MongoDB 3.0 za pomocą silnika pamięci WiredTiger, jeśli uruchomisz db.getCollectionNames()wersję powłoki mongo przed wersją 3.0 lub wersję sterownika wcześniejszą niż wersja zgodna z wersją 3.0, db.getCollectionNames()nie zwróci żadnych danych, nawet jeśli istnieją już kolekcje.

Aby uzyskać więcej informacji, zapoznaj się z tym .

Rahul
źródło
Powiązany meta post .
Peter Mortensen
0
show collections

lub

show tables

lub

db.getCollectionNames();
nixxo_raa
źródło
Czym różni się to od poprzednich odpowiedzi?
Peter Mortensen
nic oprócz ulepszania mojego konta.
nixxo_raa
0

Używam listCollections(obsługuje MongoDB 3.0 i nowsze) do tego celu.

Przykład:

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

Aby pobrać więcej informacji, takich jak indeks kolekcji:

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

Aby wydrukować tylko nazwy kolekcji:

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

Uważam, że zapewnia to większą elastyczność.

Czytaj więcej: listaKolekcje

Sahith Vibudhi
źródło
0
 1. show collections; // Display all collections
 2. show tables     // Display all collections
 3. db.getCollectionNames();   // Return array of collection. Example :[ "orders", "system.profile" ]

Szczegółowe informacje dla każdej kolekcji:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • W przypadku użytkowników z wymaganym dostępem (uprawnienia, które dają działanie listCollections w bazie danych), metoda wyświetla nazwy wszystkich kolekcji dla bazy danych.
  • W przypadku użytkowników bez wymaganego dostępu metoda wyświetla tylko kolekcje, do których użytkownicy mają uprawnienia. Na przykład, jeśli użytkownik znajdzie konkretną kolekcję w bazie danych, metoda zwróci tylko tę kolekcję.

Aby wyświetlić listę kolekcji na podstawie ciągu wyszukiwania.

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

Przykład: Znajdź całą kolekcję mającą „import” w nazwie

db.getCollectionNames().filter(function (CollectionName) { return /import/.test(CollectionName) })
Amitesh
źródło
Czy mogę uzyskać listę kolekcji zawierającą niektóre nazwy, takie jak filtr
Parveen
@Praveen - Zaktualizowałem swoją odpowiedź, aby zawierała odpowiedź na twoją sprawę. Mam nadzieję, że to pomoże
Amitesh
Dzięki Amitesh. Napisałem mój skrypt db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith („TestCollection_”)) {print („upuszczanie indeksu dla” + collName); db.getCollection (collName) .dropIndex („ ts_1 ");}});
Parveen
-1

Użyj następującego polecenia z mongopowłoki:

show collections
Anoop Sharma
źródło
jeśli umieścisz swoje polecenie w odwrotnej kolejności, źle oddaj swoje -1.
blamb
Czym różni się to od poprzednich odpowiedzi?
Peter Mortensen