Когато използвате 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_" } } ]