sql >> Database teknologi >  >> NoSQL >> MongoDB

4 måder at liste samlingerne i en MongoDB-database

Når du bruger MongoDB, er der mere end én måde at liste samlingerne i en database på.

Her er fire måder at få en liste over samlinger i en MongoDB-database på:

  • show collections Kommando
  • listCollections Kommando
  • db.getCollectionNames() Metode
  • db.getCollectionInfos() Metode

show collections Kommando

Hvis du bruger mongo-skallen, er den hurtigste måde at få en liste over samlinger på at bruge show collections kommando. Denne kommando henter en liste over samlinger og visninger i den aktuelle database.

Eksempel:

show collections

Resultat:

 employees
 pets
 pettypes
 products
 system.views 

I dette tilfælde er der fem resultater. Vi kan ikke bare se på det, men pettypes er faktisk en udsigt. De andre er samlinger.

system.views samling er en systemsamling, der indeholder information om hver visning i databasen.

De faktiske returnerede samlinger afhænger af dit adgangsniveau:

  • For brugere med den nødvendige adgang, show collections viser ikke-systemsamlingerne for databasen.
  • For brugere uden den nødvendige adgang, show collections viser kun de samlinger, som brugerne har privilegier til.

listCollections Kommando

listCollections administrativ kommando returnerer navnet og mulighederne for samlinger og visninger i databasen. Det returnerer oplysningerne i form af et dokument.

Eksempel:

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

Resultat:

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

Dokumentet indeholder information, som du kan bruge til at oprette en markør til samlingsinformationen.

Denne gang kan vi se, hvilke der er samlinger, og hvilke der er visninger.

Vi kan også køre kommandoen sådan her:

db.runCommand( { listCollections: 1.0 } )

Hvis du gør det, får du meget mere information om samlingerne. Se db.getCollectionInfos() eksempel nedenfor for at se de data, der returneres, når du kører det sådan (db.getCollectionInfos() metoden er en indpakning omkring listCollections ).

db.getCollectionNames() Metode

db.getCollectionNames() metode returnerer en matrix, der indeholder navnene på alle samlinger og visninger i den aktuelle database, eller hvis den kører med adgangskontrol, navnene på samlingerne i henhold til brugerens privilegier.

Eksempel:

db.getCollectionNames()

Resultat:

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

db.getCollectionInfos() Metode

db.getCollectionInfos() metoden returnerer en række dokumenter med indsamlings- eller visningsoplysninger, såsom navn og muligheder, for den aktuelle database. Resultaterne afhænger af brugerens privilegier.

Her er et eksempel på at kalde det uden nogen argumenter:

db.getCollectionInfos()

Resultat:

[
    {
        "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_"
        }
    }
]

Definitionen af ​​db.getCollectionInfos() går faktisk sådan her:

db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Så vi kan bruge filter parameter for at filtrere listen over samlinger baseret på et forespørgselsudtryk. Dette kan anvendes på ethvert felt, der returneres af metoden.

Du kan også bruge nameOnly parameter for at angive, at metoden kun skal returnere navnene på samlingerne og visningerne.

authorizedCollections parameter, når den er sat til true og bruges sammen med nameOnly: true , tillader en bruger uden det nødvendige privilegium (dvs. listCollections-handling på databasen) at køre kommandoen, når adgangskontrol håndhæves. I dette tilfælde returnerer kommandoen kun de samlinger, som brugeren har privilegier til.

Eksempel på brug af db.getCollectionInfos() med disse parametre:

db.getCollectionInfos( {}, true, true )

Resultat:

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

Her er en, hvor jeg filtrerer den til kun et bestemt navn:

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

Resultat:

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

Og her er, hvad der sker, når jeg fjerner de sidste to argumenter:

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

Resultat:

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


  1. Er Redis bare en cache?

  2. Send en reference til en Redis-instans til en Gorilla/Mux-handler

  3. Hvornår skal du Redis? Hvornår skal MongoDB?

  4. Couchbase benchmark afslører meget langsomme INSERT'er og GET'er (ved hjælp af KeyValue-operationer); langsommere end vedvarende MySQL-data