Comment puis-je répertorier toutes les collections dans le shell MongoDB?


758

Dans le shell MongoDB, comment répertorier toutes les collections de la base de données actuelle que j'utilise?

Réponses:


1160

Tu peux faire...

JavaScript (shell):

db.getCollectionNames()

Node.js:

db.listCollections()

Non JavaScript (shell uniquement):

show collections

La raison pour laquelle j'appelle cela non JavaScript est parce que:

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

Si vous voulez vraiment cette show collectionssortie douce et sucrée , vous pouvez:

$ mongo prodmongo/app --eval "db.getCollectionNames().join('\n')"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
Profiles
Unit_Info

Belle fonctionnalité. Vous pouvez parcourir le tableau des noms pour faire autre chose (par exemple, supprimer tous les éléments des collections).
Hilton Perantunes


6
Pouvons-nous obtenir db.listCollections()la réponse indiquée ici et cochée en vert? Sinon, les gens font la même erreur que j'ai fait un nombre incalculable de fois quand ils arrivent à cette réponse - et tentent d'utiliser db.getCollectionNameset l'erreur revient db.collectionNames is not a function.
niftylettuce

22
@niftylettuce Cette question concerne le shell MongoDB, pas le pilote node.js. db.getCollectionNames()est toujours la bonne réponse pour le shell.
JohnnyHK

424
> show collections

répertorie toutes les collections dans la base de données actuellement sélectionnée, comme indiqué dans l'aide en ligne de commande ( help).


2
Vous ne pouvez pas utiliser la sortie des collections d'exposition dans un script, mais vous pouvez faire x = db.getCollectionNames () pour obtenir un tableau de tous les noms.
ceteras

1
Que signifient les deux numéros indiqués après chaque collection? Deux types de tailles? content 1145.586MB / 1506.855MBpar exemple.
Dan Dascalescu

@Dan: Je n'ai pas utilisé MongoDB depuis un certain temps, mais ma meilleure supposition est que c'est la taille des données stockées dans la collection par rapport au montant total alloué à cette collection (pour gérer les mises à jour et la croissance mineures sans avoir à constamment réallouer nouvel espace pour l'ensemble du contenu de la collection).
Cameron

265

Comment répertorier toutes les collections de la base de données actuelle que j'utilise?

Trois méthodes

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

Pour répertorier toutes les bases de données :

show dbs

Pour entrer ou utiliser une base de données donnée:

use databasename

Pour répertorier toutes les collections :

show collections

Production:

collection1
collection2
system.indexes

(ou)

show tables

Production:

collection1
collection2
system.indexes

(ou)

db.getCollectionNames()

Production:

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

Pour entrer ou utiliser une collection donnée

use collectionname

1
+1 pour la réponse la plus complète. illustrer show tablesest très utile pour ceux qui viennent d'un arrière-plan dbms relationnel.
Jeff Puckett

9
non, usec'est d'utiliser une base de données, rien à voir avec les collections
sjmeverett

1
nous pouvons également utiliser db.collections
Biplab Malakar


30

Outre les options suggérées par d'autres personnes:

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

Il existe également une autre méthode qui peut être très pratique si vous voulez savoir comment chacune des collections a été créée (par exemple, c'est une collection plafonnée avec une taille particulière):

db.system.namespaces.find()

23

Vous devez d'abord utiliser une base de données pour afficher toutes les collections / tables à l'intérieur.

>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

Vous pouvez utiliser show tablesou show collections.


2
@LalitKumarB: Comment ça se fait? Sur la base d'autres réponses, c'est une réponse appropriée pour cela qui pourrait réellement fonctionner. C'est au moins une tentative de réponse. Ce que c'est, c'est une réponse à une question très ancienne qui a déjà plusieurs réponses correctes publiées.
Roope Hakulinen

14

Essayer:

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

La commande utilisée pour afficher toutes les collections de la base de données MongoDB est

show collections

Avant d'exécuter la show collectionscommande, vous devez sélectionner la base de données:

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

Pour voir toutes les bases de données, vous pouvez utiliser la commande

show dbs // Shows all the database names present

Pour plus d'informations, consultez la section Mise en route .


11

Si vous souhaitez afficher toutes les collections du shell MongoDB (ligne de commande), utilisez l'assistant shell,

show collections

qui affiche toutes les collections de la base de données actuelle. Si vous souhaitez obtenir toutes les listes de collecte de votre application, vous pouvez utiliser la méthode de base de données MongoDB

db.getCollectionNames()

Pour plus d'informations sur l'aide du shell MongoDB, vous pouvez consulter le mongoGuide de référence rapide du shell .


11

Les commandes suivantes sur mongoshell sont courantes.

show databases
show collections

Aussi,

show dbs
use mydb
db.getCollectionNames()

Parfois, il est utile de voir toutes les collections ainsi que les index des collections qui font partie de l'espace de noms global:

Voici comment procéder:

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

Entre les trois commandes et cet extrait, vous devriez être bien couvert!


8

Je pense que l'une des plus grandes confusions est la différence entre ce que vous pouvez faire avec mongo(ou un shell interactif / hybride) et mongo --eval(ou un shell JavaScript pur). Je garde ces documents utiles à portée de main:

Voici un exemple de script de ce que vous pourriez faire autrement avec les showcommandes:

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

Remarque: cela fonctionne très bien comme une ligne. (Mais ça a l'air terrible sur Stack Overflow.)

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

C'est extrêmement utile, merci.
Marco Craveiro

4

Sur> = 2.x, vous pouvez faire

db.listCollections()

Sur 1.x, vous pouvez le faire

db.getCollectionNames()

1
comme @JohnnyHK l'a souligné, cela ne s'applique qu'au pilote de nœud et non au shell mongo par question OP
Jeff Puckett

@JeffPuckettII Je n'utilise pas Node. Cela fonctionne parfaitement pour moi à l'intérieur de la coquille de mongo. Je me demande pourquoi ça ne le serait pas?
Aniruddh Joshi

1
J'utilise la version du shell MongoDB: 3.2.6, et lorsque j'exécute, db.getCollectionNames()j'obtiens [ "users" ]parce que j'ai une collection d'utilisateurs. Si j'essaye, db.listCollections()cela se traduit par[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett

3

Liste toutes les collections du mongoshell:

  • db.getCollectionNames ()
  • montrer les collections
  • montrer les tables

Remarque: les collections montreront à partir de la base de données actuelle où vous vous trouvez actuellement


En quoi est-ce différent des réponses précédentes?
Peter Mortensen

3

Pour passer à la base de données.

Par:

utilisez l' exemple {your_database_name} :

use friends

friendsest le nom de votre base de données.

Puis écrire:

db.getCollectionNames()
show collections

Cela vous donnera le nom des collections.


En quoi est-ce différent des réponses précédentes?
Peter Mortensen

2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • se connecter à la base de données MongoDB à l'aide de mongo. Cela va démarrer la connexion.
  • puis exécutez la show dbscommande. Cela vous montrera toutes les bases de données existantes / disponibles.
  • puis sélectionnez celui que databasevous souhaitez. Dans ce qui précède, c'est anuradhfirst. Ensuite, courez use anuradhfirst. Cela basculera vers la base de données souhaitée.
  • puis exécutez la show collectionscommande. Cela montrera tout l' collectionsintérieur de votre base de données sélectionnée.

1

montrer les collections

Cette commande fonctionne généralement sur le shell MongoDB une fois que vous êtes passé à la base de données.


1

Pour les déploiements MongoDB 3.0 utilisant le moteur de stockage WiredTiger, si vous exécutez à db.getCollectionNames()partir d'une version du shell mongo avant 3.0 ou d'une version du pilote antérieure à la version compatible 3.0, db.getCollectionNames()ne retournera aucune donnée, même s'il existe des collections existantes.

Pour plus de détails, s'il vous plaît se référer à ce .




0

J'utilise listCollections(supporte MongoDB 3.0 et supérieur) à cet effet.

Exemple:

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

Pour récupérer plus d'informations comme l'index de la collection:

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

Pour imprimer uniquement les noms de collection:

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

Je pense que cela offre plus de flexibilité.

En savoir plus: listCollections


0
 1. show collections; // Display all collections
 2. show tables     // Display all collections
 3. db.getCollectionNames();   // Return array of collection. Example :[ "orders", "system.profile" ]

Informations détaillées pour chaque collection:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Pour les utilisateurs disposant de l'accès requis (privilèges accordant l'action listCollections sur la base de données), la méthode répertorie les noms de toutes les collections de la base de données.
  • Pour les utilisateurs sans l'accès requis, la méthode répertorie uniquement les collections pour lesquelles les utilisateurs ont des privilèges. Par exemple, si un utilisateur a trouvé une collection spécifique dans une base de données, la méthode renvoie uniquement cette collection.

Pour répertorier la liste des collections en fonction d'une chaîne de recherche.

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

Exemple: Rechercher toutes les collections ayant "import" dans le nom

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

Puis-je obtenir la liste de la collection qui contient un nom comme un filtre
Parveen

@Praveen - J'ai mis à jour ma réponse pour inclure une réponse à votre cas. J'espère que ça aide
Amitesh

Merci Amitesh. J'ai écrit mon script db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("droping index for" + collName); db.getCollection (collName) .dropIndex (" ts_1 ");}});
Parveen le

-1

Utilisez la commande suivante à partir du mongoshell:

show collections

si vous placez votre commande dans des contre-coups, votez mal votre -1.
blamb

En quoi est-ce différent des réponses précédentes?
Peter Mortensen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.