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


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

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


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

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


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

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

15

Puedes usar show tableso show collections.


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

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 .


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 .


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!


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

Esto es extremadamente útil, gracias.
Marco Craveiro

4

En> = 2.x, puedes hacer

db.listCollections()

En 1.x puedes hacer

db.getCollectionNames()

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


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


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

1

mostrar colecciones

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


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 .




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


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

¿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

si pones tu comando en backticks, votaré tu -1.
blamb

¿Cómo es esto diferente de las respuestas anteriores?
Peter Mortensen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.