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


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

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


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

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


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

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

15

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


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

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 .


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 .


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!


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

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

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


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.


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.

1

pokaż kolekcje

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


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 .




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


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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.