sql >> Base de Datos >  >> NoSQL >> MongoDB

4 formas de enumerar las colecciones en una base de datos MongoDB

Al usar MongoDB, hay más de una forma de enumerar las colecciones en una base de datos.

Aquí hay cuatro formas de obtener una lista de colecciones en una base de datos MongoDB:

  • Las show collections Comando
  • Las listCollections Comando
  • El db.getCollectionNames() Método
  • El db.getCollectionInfos() Método

Las show collections Comando

Si está utilizando el shell mongo, la forma más rápida de obtener una lista de colecciones es usar show collections dominio. Este comando recupera una lista de colecciones y vistas en la base de datos actual.

Ejemplo:

show collections

Resultado:

 employees
 pets
 pettypes
 products
 system.views 

En este caso, hay cinco resultados. No podemos decirlo con solo mirarlo, pero pettypes es en realidad una vista. Los demás son colecciones.

El system.views colección es una colección del sistema que contiene información sobre cada vista en la base de datos.

Las colecciones reales devueltas dependerán de su nivel de acceso:

  • Para usuarios con el acceso requerido, show collections enumera las colecciones que no pertenecen al sistema para la base de datos.
  • Para usuarios sin el acceso requerido, show collections enumera solo las colecciones para las que los usuarios tienen privilegios.

Las listCollections Comando

Las listCollections El comando administrativo devuelve el nombre y las opciones de las colecciones y vistas en la base de datos. Devuelve la información en forma de documento.

Ejemplo:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )

Resultado:

{
    "cursor" : {
        "id" : NumberLong(0),
        "ns" : "PetHotel.$cmd.listCollections",
        "firstBatch" : [
            {
                "name" : "employees",
                "type" : "collection"
            },
            {
                "name" : "system.views",
                "type" : "collection"
            },
            {
                "name" : "pets",
                "type" : "collection"
            },
            {
                "name" : "products",
                "type" : "collection"
            },
            {
                "name" : "pettypes",
                "type" : "view"
            }
        ]
    },
    "ok" : 1
}

El documento contiene información con la que crear un cursor a la información de la colección.

Esta vez podemos ver cuáles son colecciones y cuáles son vistas.

También podemos ejecutar el comando así:

db.runCommand( { listCollections: 1.0 } )

Hacer eso proporciona mucha más información sobre las colecciones. Ver db.getCollectionInfos() ejemplo a continuación para ver los datos devueltos cuando se ejecuta de esa manera (el db.getCollectionInfos() El método es un contenedor alrededor de listCollections ).

El db.getCollectionNames() Método

El db.getCollectionNames() El método devuelve una matriz que contiene los nombres de todas las colecciones y vistas en la base de datos actual o, si se ejecuta con control de acceso, los nombres de las colecciones según el privilegio del usuario.

Ejemplo:

db.getCollectionNames()

Resultado:

 [ "employees", "pets", "pettypes", "products", "system.views" ] 

El db.getCollectionInfos() Método

El db.getCollectionInfos() El método devuelve una matriz de documentos con información de colección o vista, como el nombre y las opciones, para la base de datos actual. Los resultados dependen del privilegio del usuario.

Aquí hay un ejemplo de cómo llamarlo sin argumentos:

db.getCollectionInfos()

Resultado:

[
    {
        "name" : "employees",
        "type" : "collection",
        "options" : {
            
        },
        "info" : {
            "readOnly" : false,
            "uuid" : UUID("07e89c25-8842-4331-a1a9-96fe0b4745dc")
        },
        "idIndex" : {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_"
        }
    },
    {
        "name" : "pets",
        "type" : "collection",
        "options" : {
            
        },
        "info" : {
            "readOnly" : false,
            "uuid" : UUID("91d1c6d8-8516-455d-a3c2-b157e1998f8c")
        },
        "idIndex" : {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_"
        }
    },
    {
        "name" : "pettypes",
        "type" : "view",
        "options" : {
            "viewOn" : "pets",
            "pipeline" : [
                {
                    "$project" : {
                        "type" : 1
                    }
                }
            ]
        },
        "info" : {
            "readOnly" : true
        }
    },
    {
        "name" : "products",
        "type" : "collection",
        "options" : {
            "capped" : true,
            "size" : 7500544,
            "max" : 7000
        },
        "info" : {
            "readOnly" : false,
            "uuid" : UUID("cb084959-f374-4f51-bbed-8998c13dcbe2")
        },
        "idIndex" : {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_"
        }
    },
    {
        "name" : "system.views",
        "type" : "collection",
        "options" : {
            
        },
        "info" : {
            "readOnly" : false,
            "uuid" : UUID("3f458338-0678-4d0f-a0cf-eacbd43c8cad")
        },
        "idIndex" : {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_"
        }
    }
]

La definición de db.getCollectionInfos() en realidad es así:

db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Entonces podemos usar el filter parámetro para filtrar la lista de colecciones en función de una expresión de consulta. Esto se puede aplicar contra cualquier campo devuelto por el método.

También puede utilizar nameOnly parámetro para especificar que el método debe devolver solo los nombres de las colecciones y vistas.

Las authorizedCollections parámetro, cuando se establece en true y se usa con nameOnly: true , permite que un usuario sin el privilegio requerido (es decir, la acción listCollections en la base de datos) ejecute el comando cuando se aplica el control de acceso. En este caso, el comando devuelve solo aquellas colecciones para las que el usuario tiene privilegios.

Ejemplo de uso de db.getCollectionInfos() con estos parámetros:

db.getCollectionInfos( {}, true, true )

Resultado:

[
    {
        "name" : "employees",
        "type" : "collection"
    },
    {
        "name" : "pets",
        "type" : "collection"
    },
    {
        "name" : "pettypes",
        "type" : "view"
    },
    {
        "name" : "products",
        "type" : "collection"
    },
    {
        "name" : "system.views",
        "type" : "collection"
    }
]

Aquí hay uno donde lo filtro a solo un nombre específico:

db.getCollectionInfos( { name: "pets" }, true, true )

Resultado:

 [ { "name" : "pets", "type" : "collection" } ] 

Y esto es lo que sucede cuando elimino los dos últimos argumentos:

db.getCollectionInfos( { name: "pets" } )

Resultado:

[
    {
        "name" : "pets",
        "type" : "collection",
        "options" : {
            
        },
        "info" : {
            "readOnly" : false,
            "uuid" : UUID("91d1c6d8-8516-455d-a3c2-b157e1998f8c")
        },
        "idIndex" : {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_"
        }
    }
]