Korzystając z MongoDB, istnieje więcej niż jeden sposób na wyświetlenie listy kolekcji w bazie danych.
Oto cztery sposoby uzyskania listy kolekcji w bazie danych MongoDB:
show collectionsPolecenie- Kolekcja
listCollectionsPolecenie db.getCollectionNames()Metodadb.getCollectionInfos()Metoda
show collections Polecenie
Jeśli używasz powłoki mongo, najszybszym sposobem uzyskania listy kolekcji jest użycie show collections Komenda. To polecenie pobiera listę kolekcji i widoków w bieżącej bazie danych.
Przykład:
show collections Wynik:
employees pets pettypes products system.views
W tym przypadku jest pięć wyników. Nie możemy tego stwierdzić po prostu patrząc na to, ale pettypes to właściwie widok. Pozostałe to kolekcje.
system.views kolekcja to kolekcja systemowa, która zawiera informacje o każdym widoku w bazie danych.
Rzeczywiste zwrócone kolekcje będą zależeć od Twojego poziomu dostępu:
- Dla użytkowników z wymaganym dostępem,
show collectionswyświetla listę niesystemowych kolekcji dla bazy danych. - Dla użytkowników bez wymaganego dostępu,
show collectionswyświetla tylko kolekcje, do których użytkownicy mają uprawnienia.
Kolekcja listCollections Polecenie
listCollections Polecenie administracyjne zwraca nazwę i opcje kolekcji i widoków w bazie danych. Zwraca informacje w formie dokumentu.
Przykład:
db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } ) Wynik:
{
"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
} Dokument zawiera informacje, za pomocą których można utworzyć kursor do informacji o kolekcji.
Tym razem możemy zobaczyć, które z nich są kolekcjami, a które widokami.
Możemy również uruchomić polecenie w ten sposób:
db.runCommand( { listCollections: 1.0 } )
Dzięki temu uzyskasz dużo więcej informacji o kolekcjach. Zobacz db.getCollectionInfos() przykład poniżej, aby zobaczyć dane zwrócone podczas uruchamiania go w ten sposób (db.getCollectionInfos() metoda jest opakowaniem wokół listCollections ).
db.getCollectionNames() Metoda
db.getCollectionNames() Metoda zwraca tablicę zawierającą nazwy wszystkich kolekcji i widoków w bieżącej bazie danych lub, jeśli działa z kontrolą dostępu, nazwy kolekcji zgodnie z uprawnieniami użytkownika.
Przykład:
db.getCollectionNames() Wynik:
[ "employees", "pets", "pettypes", "products", "system.views" ]
db.getCollectionInfos() Metoda
db.getCollectionInfos() Metoda zwraca tablicę dokumentów z informacjami o kolekcji lub widoku, takimi jak nazwa i opcje, dla bieżącej bazy danych. Wyniki zależą od uprawnień użytkownika.
Oto przykład wywołania go bez żadnych argumentów:
db.getCollectionInfos() Wynik:
[
{
"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_"
}
}
]
Definicja db.getCollectionInfos() faktycznie idzie tak:
db.getCollectionInfos(filter, nameOnly, authorizedCollections)
Możemy więc użyć filter parametr, aby filtrować listę kolekcji na podstawie wyrażenia zapytania. Można to zastosować do dowolnego pola zwróconego przez metodę.
Możesz także użyć nameOnly parametr określający, że metoda powinna zwracać tylko nazwy kolekcji i widoków.
authorizedCollections parametr, gdy jest ustawiony na true i używane z nameOnly: true , umożliwia użytkownikowi bez wymaganych uprawnień (tj. akcji listCollections w bazie danych) uruchomienie komendy, gdy wymuszana jest kontrola dostępu. W takim przypadku polecenie zwraca tylko te kolekcje, do których użytkownik ma uprawnienia.
Przykład użycia db.getCollectionInfos() z tymi parametrami:
db.getCollectionInfos( {}, true, true ) Wynik:
[
{
"name" : "employees",
"type" : "collection"
},
{
"name" : "pets",
"type" : "collection"
},
{
"name" : "pettypes",
"type" : "view"
},
{
"name" : "products",
"type" : "collection"
},
{
"name" : "system.views",
"type" : "collection"
}
]
Oto jeden, w którym filtruję go tylko do określonej nazwy:
db.getCollectionInfos( { name: "pets" }, true, true ) Wynik:
[ { "name" : "pets", "type" : "collection" } ] A oto, co się stanie, gdy usunę dwa ostatnie argumenty:
db.getCollectionInfos( { name: "pets" } ) Wynik:
[
{
"name" : "pets",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("91d1c6d8-8516-455d-a3c2-b157e1998f8c")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]