¿Cómo puedo enumerar todas las colecciones en el shell MongoDB?

757

En el shell MongoDB, ¿cómo enumero todas las colecciones para la base de datos actual que estoy usando?

molinillo de cafe
fuente

Respuestas:

1160

Tu puedes hacer...

JavaScript (shell):

db.getCollectionNames()

Node.js:

db.listCollections()

No JavaScript (solo shell):

show collections

La razón por la que llamo que no es JavaScript es porque:

$ 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 realmente quieres esa dulce, dulce show collectionssalida, puedes:

$ mongo prodmongo/app --eval "db.getCollectionNames().join('\n')"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
Profiles
Unit_Info
AdaTheDev
fuente
Buena característica Puede recorrer en iteración la matriz de nombres para hacer otra cosa (por ejemplo, eliminar todos los elementos de las colecciones).
Hilton Perantunes
66
¿Podemos obtener db.listCollections()la respuesta que se muestra aquí y marcarla en verde? De lo contrario, las personas están cometiendo el mismo error que cometí innumerables veces cuando llegan a esta respuesta, e intentan usar db.getCollectionNamesy el error regresa db.collectionNames is not a function.
niftylettuce
22
@niftylettuce Esta pregunta es sobre el shell MongoDB, no sobre el controlador node.js. db.getCollectionNames()sigue siendo la respuesta correcta para el shell.
JohnnyHK
424
> show collections

enumerará todas las colecciones en la base de datos seleccionada actualmente, como se indica en la línea de comando help ( help).

Cameron
fuente
2
No puede usar el resultado de mostrar colecciones en un script, pero se puede hacer x = db.getCollectionNames () para obtener una matriz de todos los nombres.
ceteras
1
¿Qué significan los dos números enumerados después de cada colección? ¿Dos tipos de tallas? content 1145.586MB / 1506.855MBpor ejemplo.
Dan Dascalescu
@Dan: No he usado MongoDB en mucho tiempo, pero mi mejor conjetura es que es el tamaño de los datos almacenados en la colección versus la cantidad total asignada a esa colección (para manejar actualizaciones menores y crecimiento sin tener que reasignar constantemente nuevo espacio para los contenidos de toda la colección).
Cameron
265

¿Cómo enumero todas las colecciones para la base de datos actual que estoy usando?

Tres métodos

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

Para enumerar todas las bases de datos :

show dbs

Para ingresar o usar una base de datos determinada:

use databasename

Para enumerar todas las colecciones :

show collections

Salida:

collection1
collection2
system.indexes

(o)

show tables

Salida:

collection1
collection2
system.indexes

(o)

db.getCollectionNames()

Salida:

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

Para ingresar o usar la colección dada

use collectionname
Bharadwaja Bapatla
fuente
1
+1 para la respuesta más completa. ilustrar show tableses bastante útil para aquellos que provienen de un fondo dbms relacional
Jeff Puckett
99
no, usees usar una base de datos, nada que ver con colecciones
sjmeverett
1
también podemos usar db.collections
Biplab Malakar
53

> show tables

Da el mismo resultado que la respuesta de Cameron.

Kevin Meredith
fuente
30

Además de las opciones sugeridas por otras personas:

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

También hay otra forma que puede ser realmente útil si desea saber cómo se creó cada una de las colecciones (por ejemplo, es una colección limitada con un tamaño particular):

db.system.namespaces.find()
Salvador Dalí
fuente
23

Primero necesita usar una base de datos para mostrar todas las colecciones / tablas dentro de ella.

>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
fuente
15

Puedes usar show tableso show collections.

lxg
fuente
2
@LalitKumarB: ¿Cómo es eso? Basado en otras respuestas, esa es la respuesta adecuada para esto que realmente podría funcionar. Al menos es un intento de respuesta. Lo que es, es una respuesta a una pregunta muy antigua que ya tiene múltiples respuestas correctas publicadas.
Roope Hakulinen
14

Tratar:

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
fuente
12

El comando utilizado para mostrar todas las colecciones en la base de datos MongoDB es

show collections

Antes de ejecutar el show collectionscomando, debe seleccionar la base de datos:

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

Para ver todas las bases de datos, puede usar el comando

show dbs // Shows all the database names present

Para obtener más información, visite Cómo comenzar .

kkk
fuente
11

Si desea mostrar todas las colecciones del shell MongoDB (línea de comando), use el asistente de shell,

show collections

que muestra todas las colecciones para la base de datos actual. Si desea obtener todas las listas de recopilación de su aplicación, puede utilizar el método de base de datos MongoDB

db.getCollectionNames()

Para obtener más información sobre el asistente de shell MongoDB, puede ver la mongoReferencia rápida de Shell .

Engr. Hasanuzzaman Sumon
fuente
11

Los siguientes comandos en mongoshell son comunes.

show databases
show collections

También,

show dbs
use mydb
db.getCollectionNames()

A veces es útil ver todas las colecciones, así como los índices de las colecciones que forman parte del espacio de nombres general:

Así es como lo harías:

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

¡Entre los tres comandos y este fragmento, debe estar bien cubierto!

Sood
fuente
8

Creo que una de las mayores confusiones es la diferencia entre lo que puede hacer con mongo(o un shell interactivo / híbrido) frente a mongo --eval(o un shell de JavaScript puro). Tengo estos útiles documentos a mano:

Aquí hay un ejemplo de secuencias de comandos de lo que de otro modo podría hacer con showcomandos:

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

Nota: Eso funciona muy bien como una sola línea. (Pero se ve terrible en Stack Overflow).

mongo --eval "db.getMongo().getDBNames().forEach(function(v, i){print(v+'\n\t'+db.getSiblingDB(v).getCollectionNames().join('\n\t'))})"
Bruno Bronosky
fuente
Esto es extremadamente útil, gracias.
Marco Craveiro
4

En> = 2.x, puedes hacer

db.listCollections()

En 1.x puedes hacer

db.getCollectionNames()
Aniruddh Joshi
fuente
1
como @JohnnyHK señaló que esto solo se aplica al controlador de nodo y no al shell de mongo por pregunta OP
Jeff Puckett
@JeffPuckettII No uso Node. Esto funciona perfectamente para mí dentro de Mongo Shell. Me pregunto por qué no lo haría.
Aniruddh Joshi
1
Estoy ejecutando la versión de shell MongoDB: 3.2.6, y cuando ejecuto db.getCollectionNames()me sale [ "users" ]porque tengo una colección de usuarios. Si lo intento, db.listCollections()entonces resulta[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett
3

Enumere todas las colecciones del mongoshell:

  • db.getCollectionNames ()
  • mostrar colecciones
  • mostrar tablas

Nota: Las colecciones se mostrarán de la base de datos actual en el que se encuentra actualmente

Hasib Kamal
fuente
¿Cómo es esto diferente de las respuestas anteriores?
Peter Mortensen
3

Para cambiar a la base de datos.

Por:

utilice el ejemplo de {your_database_name} :

use friends

donde friendsestá el nombre de tu base de datos.

Luego escribir:

db.getCollectionNames()
show collections

Esto te dará el nombre de las colecciones.

Shashikant Pandit
fuente
¿Cómo es esto diferente de las respuestas anteriores?
Peter Mortensen
2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • conectarse con la base de datos MongoDB usando mongo. Esto iniciará la conexión.
  • luego ejecuta el show dbscomando. Esto le mostrará todas las bases de datos existentes / disponibles.
  • luego seleccione el databaseque desee. En lo anterior es anuradhfirst. Entonces corre use anuradhfirst. Esto cambiará a la base de datos que desee.
  • luego ejecuta el show collectionscomando. Esto mostrará todo el contenido de collectionsla base de datos seleccionada.
Caldera Chanaka
fuente
1

mostrar colecciones

Este comando generalmente funciona en el shell MongoDB una vez que ha cambiado a la base de datos.

PHINCY L PIOUS
fuente
1

Para las implementaciones de MongoDB 3.0 que utilizan el motor de almacenamiento WiredTiger, si ejecuta db.getCollectionNames()desde una versión del shell mongo antes de 3.0 o una versión del controlador anterior a la versión compatible con 3.0, db.getCollectionNames()no devolverá datos, incluso si hay colecciones existentes.

Para más detalles, consulte esto .

Rahul
fuente
Meta publicación relacionada .
Peter Mortensen
0
show collections

o

show tables

o

db.getCollectionNames();
nixxo_raa
fuente
¿Cómo es esto diferente de las respuestas anteriores?
Peter Mortensen
nada más que mejorar mi cuenta.
nixxo_raa
0

yo suelo listCollections (admite MongoDB 3.0 y versiones posteriores) para este propósito.

Ejemplo:

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

Para obtener más información como el índice de la colección:

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

Para imprimir solo los nombres de las colecciones:

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

Siento que esto proporciona más flexibilidad.

Leer más: listCollections

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

Información detallada para cada colección:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Para los usuarios con el acceso requerido (privilegios que otorgan la acción listCollections en la base de datos), el método enumera los nombres de todas las colecciones para la base de datos.
  • Para los usuarios sin el acceso requerido, el método enumera solo las colecciones para las cuales los usuarios tienen privilegios. Por ejemplo, si un usuario ha encontrado en una colección específica en una base de datos, el método devolvería solo esa colección.

Para enumerar la lista de colecciones basada en una cadena de búsqueda.

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

Ejemplo: buscar todas las colecciones que tengan "importación" en el nombre

db.getCollectionNames().filter(function (CollectionName) { return /import/.test(CollectionName) })
Amitesh
fuente
¿Puedo obtener la lista de la colección que contiene algún nombre como filtro
Parveen
@Praveen - He actualizado mi respuesta para incluir la respuesta a su caso. Espero que ayude
Amitesh
Gracias Amitesh Escribí mi script db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("índice de caída para" + collName); db.getCollection (collName) .dropIndex (" ts_1 ");}});
Parveen
-1

Use el siguiente comando del mongoshell:

show collections
Anoop Sharma
fuente
si pones tu comando en backticks, votaré tu -1.
blamb
¿Cómo es esto diferente de las respuestas anteriores?
Peter Mortensen