Когато използвате MongoDB, има повече от един начин за изброяване на колекциите в база данни.
Ето четири начина да получите списък с колекции в база данни на MongoDB:
show collectionsКомандаlistCollectionsКомандаdb.getCollectionNames()Методdb.getCollectionInfos()Метод
show collections Команда
Ако използвате mongo shell, най-бързият начин да получите списък с колекции е да използвате show collections команда. Тази команда извлича списък с колекции и изгледи в текущата база данни.
Пример:
show collections Резултат:
employees pets pettypes products system.views
В този случай има пет резултата. Не можем да разберем само като го погледнем, а pettypes всъщност е изглед. Другите са колекции.
system.views колекцията е системна колекция, която съдържа информация за всеки изглед в базата данни.
Действително върнатите колекции ще зависят от вашето ниво на достъп:
- За потребители с необходимия достъп,
show collectionsизброява несистемните колекции за базата данни. - За потребители без необходимия достъп,
show collectionsизброява само колекциите, за които потребителите имат привилегии.
listCollections Команда
listCollections административната команда връща името и опциите на колекциите и изгледите в базата данни. Връща информацията под формата на документ.
Пример:
db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } ) Резултат:
{
"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
} Документът съдържа информация, с която да създадете курсор към информацията за колекцията.
Този път можем да видим кои са колекции и кои са изгледи.
Можем също да изпълним командата по следния начин:
db.runCommand( { listCollections: 1.0 } )
Това предоставя много повече информация за колекциите. Вижте db.getCollectionInfos() пример по-долу, за да видите данните, върнати при стартирането им по този начин (db.getCollectionInfos() методът е обвивка около listCollections ).
db.getCollectionNames() Метод
db.getCollectionNames() методът връща масив, съдържащ имената на всички колекции и изгледи в текущата база данни, или ако се изпълнява с контрол на достъпа, имената на колекциите според привилегията на потребителя.
Пример:
db.getCollectionNames() Резултат:
[ "employees", "pets", "pettypes", "products", "system.views" ]
db.getCollectionInfos() Метод
db.getCollectionInfos() метод връща масив от документи с информация за събиране или преглед, като име и опции, за текущата база данни. Резултатите зависят от привилегията на потребителя.
Ето пример за извикването му без никакви аргументи:
db.getCollectionInfos() Резултат:
[
{
"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_"
}
}
]
Дефиницията на db.getCollectionInfos() всъщност става така:
db.getCollectionInfos(filter, nameOnly, authorizedCollections)
Така че можем да използваме filter параметър за филтриране на списъка с колекции въз основа на израз на заявка. Това може да се приложи спрямо всяко поле, върнато от метода.
Можете също да използвате nameOnly параметър, за да посочите, че методът трябва да връща само имената на колекциите и изгледите.
authorizedCollections параметър, когато е зададен на true и се използва с nameOnly: true , позволява на потребител без необходимите привилегии (т.е. действие listCollections в базата данни) да изпълни командата, когато контролът на достъпа е наложен. В този случай командата връща само онези колекции, за които потребителят има привилегии.
Пример за използване на db.getCollectionInfos() със следните параметри:
db.getCollectionInfos( {}, true, true ) Резултат:
[
{
"name" : "employees",
"type" : "collection"
},
{
"name" : "pets",
"type" : "collection"
},
{
"name" : "pettypes",
"type" : "view"
},
{
"name" : "products",
"type" : "collection"
},
{
"name" : "system.views",
"type" : "collection"
}
]
Ето едно, където го филтрирам само до конкретно име:
db.getCollectionInfos( { name: "pets" }, true, true ) Резултат:
[ { "name" : "pets", "type" : "collection" } ] И ето какво се случва, когато премахна последните два аргумента:
db.getCollectionInfos( { name: "pets" } ) Резултат:
[
{
"name" : "pets",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("91d1c6d8-8516-455d-a3c2-b157e1998f8c")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]