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

4 modi per elencare le raccolte in un database MongoDB

Quando si utilizza MongoDB, c'è più di un modo per elencare le raccolte in un database.

Ecco quattro modi per ottenere un elenco di raccolte in un database MongoDB:

  • Il show collections Comando
  • Il listCollections Comando
  • Il db.getCollectionNames() Metodo
  • Il db.getCollectionInfos() Metodo

Il show collections Comando

Se stai utilizzando mongo shell, il modo più rapido per ottenere un elenco di raccolte è utilizzare show collections comando. Questo comando recupera un elenco di raccolte e viste nel database corrente.

Esempio:

show collections

Risultato:

 employees
 pets
 pettypes
 products
 system.views 

In questo caso, ci sono cinque risultati. Non possiamo dirlo solo guardandolo, ma pettypes è in realtà una vista. Gli altri sono raccolte.

Il system.views raccolta è una raccolta di sistema che contiene informazioni su ciascuna vista nel database.

Gli incassi effettivi restituiti dipenderanno dal tuo livello di accesso:

  • Per gli utenti con l'accesso richiesto, show collections elenca le raccolte non di sistema per il database.
  • Per gli utenti senza l'accesso richiesto, show collections elenca solo le raccolte per le quali gli utenti hanno privilegi.

Il listCollections Comando

Le listCollections Il comando amministrativo restituisce il nome e le opzioni delle raccolte e delle viste nel database. Restituisce le informazioni sotto forma di documento.

Esempio:

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

Risultato:

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

Il documento contiene informazioni con cui creare un cursore sulle informazioni della raccolta.

Questa volta possiamo vedere quali sono raccolte e quali visualizzazioni.

Possiamo anche eseguire il comando in questo modo:

db.runCommand( { listCollections: 1.0 } )

Ciò fornisce molte più informazioni sulle raccolte. Vedi db.getCollectionInfos() esempio di seguito per vedere i dati restituiti durante l'esecuzione in questo modo (il db.getCollectionInfos() è un wrapper di listCollections ).

Il db.getCollectionNames() Metodo

Il db.getCollectionNames() restituisce un array contenente i nomi di tutte le raccolte e viste nel database corrente o, se in esecuzione con controllo di accesso, i nomi delle raccolte in base al privilegio dell'utente.

Esempio:

db.getCollectionNames()

Risultato:

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

Il db.getCollectionInfos() Metodo

Il db.getCollectionInfos() restituisce una matrice di documenti con informazioni sulla raccolta o sulla visualizzazione, come nome e opzioni, per il database corrente. I risultati dipendono dal privilegio dell'utente.

Ecco un esempio di come chiamarlo senza argomenti:

db.getCollectionInfos()

Risultato:

[
    {
        "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 definizione di db.getCollectionInfos() in realtà va così:

db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Quindi possiamo usare il filter parametro per filtrare l'elenco di raccolte in base a un'espressione di query. Questo può essere applicato a qualsiasi campo restituito dal metodo.

Puoi anche usare nameOnly parametro per specificare che il metodo deve restituire solo i nomi delle raccolte e delle viste.

Le authorizedCollections parametro, se impostato su true e usato con nameOnly: true , consente a un utente senza il privilegio richiesto (ovvero l'azione listCollections sul database) di eseguire il comando quando viene applicato il controllo di accesso. In questo caso, il comando restituisce solo le raccolte per le quali l'utente dispone dei privilegi.

Esempio di utilizzo di db.getCollectionInfos() con questi parametri:

db.getCollectionInfos( {}, true, true )

Risultato:

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

Eccone uno in cui lo filtro solo in base a un nome specifico:

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

Risultato:

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

Ed ecco cosa succede quando rimuovo gli ultimi due argomenti:

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

Risultato:

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