MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

4 façons de répertorier les collections dans une base de données MongoDB

Lorsque vous utilisez MongoDB, il existe plusieurs façons de répertorier les collections dans une base de données.

Voici quatre façons d'obtenir une liste des collections dans une base de données MongoDB :

  • Les show collections Commande
  • Les listCollections Commande
  • Le db.getCollectionNames() Méthode
  • Le db.getCollectionInfos() Méthode

Les show collections Commande

Si vous utilisez le shell mongo, le moyen le plus rapide d'obtenir une liste des collections est d'utiliser le show collections commande. Cette commande récupère une liste de collections et de vues dans la base de données actuelle.

Exemple :

show collections

Résultat :

 employees
 pets
 pettypes
 products
 system.views 

Dans ce cas, il y a cinq résultats. Nous ne pouvons pas le dire simplement en le regardant, mais pettypes est en fait une vue. Les autres sont des collections.

Les system.views collection est une collection système qui contient des informations sur chaque vue de la base de données.

Les collections réelles renvoyées dépendront de votre niveau d'accès :

  • Pour les utilisateurs disposant de l'accès requis, show collections répertorie les collections non système pour la base de données.
  • Pour les utilisateurs ne disposant pas de l'accès requis, show collections répertorie uniquement les collections pour lesquelles les utilisateurs disposent de privilèges.

Les listCollections Commande

Les listCollections La commande administrative renvoie le nom et les options des collections et des vues dans la base de données. Il renvoie les informations sous la forme d'un document.

Exemple :

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

Résultat :

{
    "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
}

Le document contient des informations avec lesquelles créer un curseur vers les informations de la collection.

Cette fois, nous pouvons voir lesquels sont des collections et lesquels sont des vues.

Nous pouvons également exécuter la commande comme ceci :

db.runCommand( { listCollections: 1.0 } )

Cela fournit beaucoup plus d'informations sur les collections. Voir le db.getCollectionInfos() exemple ci-dessous pour voir les données renvoyées lors de son exécution comme ça (le db.getCollectionInfos() la méthode est un wrapper autour de listCollections ).

Le db.getCollectionNames() Méthode

Le db.getCollectionNames() La méthode renvoie un tableau contenant les noms de toutes les collections et vues de la base de données actuelle, ou si elle est exécutée avec un contrôle d'accès, les noms des collections en fonction des privilèges de l'utilisateur.

Exemple :

db.getCollectionNames()

Résultat :

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

Le db.getCollectionInfos() Méthode

Le db.getCollectionInfos() La méthode renvoie un tableau de documents avec des informations de collection ou de vue, telles que le nom et les options, pour la base de données actuelle. Les résultats dépendent des privilèges de l'utilisateur.

Voici un exemple d'appel sans aucun argument :

db.getCollectionInfos()

Résultat :

[
    {
        "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 définition de db.getCollectionInfos() se passe en fait comme ceci :

db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Nous pouvons donc utiliser le filter paramètre pour filtrer la liste des collections en fonction d'une expression de requête. Cela peut être appliqué à n'importe quel champ renvoyé par la méthode.

Vous pouvez également utiliser le nameOnly paramètre pour spécifier que la méthode ne doit renvoyer que les noms des collections et des vues.

Les authorizedCollections paramètre, lorsqu'il est défini sur true et utilisé avec nameOnly: true , permet à un utilisateur sans le privilège requis (c'est-à-dire l'action listCollections sur la base de données) d'exécuter la commande lorsque le contrôle d'accès est appliqué. Dans ce cas, la commande renvoie uniquement les collections pour lesquelles l'utilisateur dispose de privilèges.

Exemple d'utilisation de db.getCollectionInfos() avec ces paramètres :

db.getCollectionInfos( {}, true, true )

Résultat :

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

En voici un où je le filtre à un nom spécifique :

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

Résultat :

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

Et voici ce qui se passe lorsque je supprime les deux derniers arguments :

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

Résultat :

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