MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

4 Möglichkeiten zum Auflisten der Sammlungen in einer MongoDB-Datenbank

Bei der Verwendung von MongoDB gibt es mehrere Möglichkeiten, die Sammlungen in einer Datenbank aufzulisten.

Hier sind vier Möglichkeiten, um eine Liste von Sammlungen in einer MongoDB-Datenbank zu erhalten:

  • Die show collections Befehl
  • Die listCollections Befehl
  • Der db.getCollectionNames() Methode
  • Die db.getCollectionInfos() Methode

Die show collections Befehl

Wenn Sie die Mongo-Shell verwenden, erhalten Sie am schnellsten eine Liste mit Sammlungen, indem Sie show collections verwenden Befehl. Dieser Befehl ruft eine Liste von Sammlungen und Ansichten in der aktuellen Datenbank ab.

Beispiel:

show collections

Ergebnis:

 employees
 pets
 pettypes
 products
 system.views 

In diesem Fall gibt es fünf Ergebnisse. Wir können es nicht nur durch Anschauen erkennen, aber pettypes ist eigentlich eine Ansicht. Die anderen sind Sammlungen.

Die system.views Sammlung ist eine Systemsammlung, die Informationen zu jeder Ansicht in der Datenbank enthält.

Die tatsächlich zurückgegebenen Sammlungen hängen von Ihrer Zugriffsebene ab:

  • Für Benutzer mit dem erforderlichen Zugriff show collections listet die Nicht-Systemsammlungen für die Datenbank auf.
  • Für Benutzer ohne den erforderlichen Zugriff show collections listet nur die Sammlungen auf, für die der Benutzer Berechtigungen hat.

Die listCollections Befehl

Die listCollections Der Verwaltungsbefehl gibt den Namen und die Optionen von Sammlungen und Ansichten in der Datenbank zurück. Es gibt die Informationen in Form eines Dokuments zurück.

Beispiel:

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

Ergebnis:

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

Das Dokument enthält Informationen, mit denen ein Cursor zu den Sammlungsinformationen erstellt werden kann.

Dieses Mal können wir sehen, welche Sammlungen und welche Ansichten sind.

Wir können den Befehl auch so ausführen:

db.runCommand( { listCollections: 1.0 } )

Dadurch erhalten Sie viel mehr Informationen über die Sammlungen. Siehe db.getCollectionInfos() Beispiel unten, um die zurückgegebenen Daten zu sehen, wenn es so ausgeführt wird (die db.getCollectionInfos() Methode ist ein Wrapper um listCollections ).

Die db.getCollectionNames() Methode

Die db.getCollectionNames() Die Methode gibt ein Array zurück, das die Namen aller Sammlungen und Ansichten in der aktuellen Datenbank enthält, oder, wenn sie mit Zugriffskontrolle ausgeführt wird, die Namen der Sammlungen gemäß den Berechtigungen des Benutzers.

Beispiel:

db.getCollectionNames()

Ergebnis:

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

Die db.getCollectionInfos() Methode

Die db.getCollectionInfos() -Methode gibt ein Array von Dokumenten mit Sammlungs- oder Ansichtsinformationen wie Name und Optionen für die aktuelle Datenbank zurück. Die Ergebnisse hängen von den Rechten des Benutzers ab.

Hier ist ein Beispiel für den Aufruf ohne Argumente:

db.getCollectionInfos()

Ergebnis:

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

Die Definition von db.getCollectionInfos() geht eigentlich so:

db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Also können wir den filter verwenden -Parameter, um die Liste der Sammlungen basierend auf einem Abfrageausdruck zu filtern. Dies kann auf jedes von der Methode zurückgegebene Feld angewendet werden.

Sie können auch nameOnly verwenden Parameter, um anzugeben, dass die Methode nur die Namen der Sammlungen und Ansichten zurückgeben soll.

Die authorizedCollections -Parameter, wenn er auf true gesetzt ist und mit nameOnly: true verwendet , ermöglicht es einem Benutzer ohne die erforderliche Berechtigung (d. h. listCollections-Aktion für die Datenbank), den Befehl auszuführen, wenn die Zugriffssteuerung erzwungen wird. In diesem Fall gibt der Befehl nur die Sammlungen zurück, für die der Benutzer Berechtigungen hat.

Beispiel für die Verwendung von db.getCollectionInfos() mit diesen Parametern:

db.getCollectionInfos( {}, true, true )

Ergebnis:

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

Hier ist eine, bei der ich sie nur nach einem bestimmten Namen filtere:

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

Ergebnis:

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

Und Folgendes passiert, wenn ich die letzten beiden Argumente entferne:

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

Ergebnis:

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