sql >> Database >  >> NoSQL >> MongoDB

4 manieren om de collecties in een MongoDB-database op te sommen

Wanneer u MongoDB gebruikt, is er meer dan één manier om de collecties in een database weer te geven.

Hier zijn vier manieren om een ​​lijst met collecties in een MongoDB-database te krijgen:

  • De show collections Commando
  • De listCollections Commando
  • De db.getCollectionNames() Methode
  • De db.getCollectionInfos() Methode

De show collections Commando

Als je de mongo-shell gebruikt, is de snelste manier om een ​​lijst met collecties te krijgen het gebruik van de show collections opdracht. Deze opdracht haalt een lijst op met verzamelingen en weergaven in de huidige database.

Voorbeeld:

show collections

Resultaat:

 employees
 pets
 pettypes
 products
 system.views 

In dit geval zijn er vijf resultaten. We kunnen het niet alleen zien door ernaar te kijken, maar pettypes is eigenlijk een uitzicht. De andere zijn verzamelingen.

De system.views verzameling is een systeemverzameling die informatie bevat over elke weergave in de database.

De daadwerkelijk geretourneerde collecties zijn afhankelijk van uw toegangsniveau:

  • Voor gebruikers met de vereiste toegang:show collections geeft de niet-systeemverzamelingen voor de database weer.
  • Voor gebruikers zonder de vereiste toegang:show collections geeft alleen de collecties weer waarvoor de gebruikers privileges hebben.

De listCollections Commando

De listCollections administratieve opdracht retourneert de naam en opties van verzamelingen en weergaven in de database. Het geeft de informatie terug in de vorm van een document.

Voorbeeld:

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

Resultaat:

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

Het document bevat informatie waarmee een cursor naar de collectie-informatie kan worden gemaakt.

Deze keer kunnen we zien welke collecties zijn en welke views.

We kunnen de opdracht ook als volgt uitvoeren:

db.runCommand( { listCollections: 1.0 } )

Hierdoor krijg je veel meer informatie over de collecties. Zie de db.getCollectionInfos() voorbeeld hieronder om de gegevens te zien die worden geretourneerd wanneer het zo wordt uitgevoerd (de db.getCollectionInfos() methode is een wrapper rond listCollections ).

De db.getCollectionNames() Methode

De db.getCollectionNames() methode retourneert een array met de namen van alle collecties en views in de huidige database, of, indien uitgevoerd met toegangsbeheer, de namen van de collecties volgens het privilege van de gebruiker.

Voorbeeld:

db.getCollectionNames()

Resultaat:

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

De db.getCollectionInfos() Methode

De db.getCollectionInfos() methode retourneert een reeks documenten met verzamel- of weergave-informatie, zoals naam en opties, voor de huidige database. De resultaten zijn afhankelijk van het privilege van de gebruiker.

Hier is een voorbeeld om het zonder argumenten aan te roepen:

db.getCollectionInfos()

Resultaat:

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

De definitie van db.getCollectionInfos() gaat eigenlijk zo:

db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Dus we kunnen het filter . gebruiken parameter om de lijst met collecties te filteren op basis van een query-expressie. Dit kan worden toegepast op elk veld dat door de methode wordt geretourneerd.

U kunt ook de nameOnly . gebruiken parameter om aan te geven dat de methode alleen de namen van de collecties en views moet retourneren.

De authorizedCollections parameter, indien ingesteld op true en gebruikt met nameOnly: true , staat een gebruiker zonder het vereiste privilege (d.w.z. listCollections-actie op de database) toe om de opdracht uit te voeren wanneer toegangsbeheer wordt afgedwongen. In dit geval retourneert het commando alleen die collecties waarvoor de gebruiker privileges heeft.

Voorbeeld van het gebruik van db.getCollectionInfos() met deze parameters:

db.getCollectionInfos( {}, true, true )

Resultaat:

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

Hier is er een waar ik het filter op een specifieke naam:

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

Resultaat:

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

En dit is wat er gebeurt als ik de laatste twee argumenten verwijder:

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

Resultaat:

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


  1. Hoe print je meer dan 20 items (documenten) in MongoDB's shell?

  2. Redis-transacties en langlopende Lua-scripts

  3. Hoe moet ik verbinding maken met een Redis-instantie vanuit een AWS Lambda-functie?

  4. MongoDB:hoe de datum te ontleden in 3.6 mongoDb-versie?