db.getCollectionInfos()

On this page本页内容

Definition定义

db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Returns an array of documents with collection or view information, such as name and options, for the current database. 返回包含当前数据库的集合或视图信息(如名称和选项)的文档数组。The results depend on the user's privilege. 结果取决于用户的权限。For details, see Required Access.有关详细信息,请参阅必需访问

The db.getCollectionInfos() helper wraps the listCollections command.db.getCollectionInfos()帮助器包装listCollections命令。

The db.getCollectionInfos() method has the following optional parameter:db.getCollectionInfos()方法具有以下可选参数:

Parameter参数Type类型Description描述
filterdocument

Optional. 可选。A query expression to filter the list of collections.用于筛选集合列表的查询表达式。

You can specify a query expression on any of the fields returned by db.getCollectionInfos().您可以在db.getCollectionInfos()返回的任何字段上指定查询表达式。

nameOnlyboolean

Optional. 可选。A flag to indicate whether the command should return just the collection/view names and type or return both the name and other information.一个标志,指示命令是否只返回集合/视图名称和类型,或同时返回名称和其他信息。

Returning just the name and type (view or collection) does not take collection-level locks whereas returning full collection information locks each collection in the database.仅返回名称和类型(viewcollection)不会获得集合级别的锁,而返回完整的集合信息会锁定数据库中的每个集合。

The default value is false.

Note注意

When nameOnly is true, your filter expression can only filter based on a collection's name and type. No other fields are available.nameOnlytrue时,filter表达式只能基于集合的名称和类型进行筛选。没有其他字段可用。

New in version 4.0.在版本4.0中新增

authorizedCollectionsboolean

Optional. 可选。A flag, when set to true and used with nameOnly: true, that allows a user without the required privilege (i.e. listCollections action on the database) to run the command when access control is enforced.当设置为true并与nameOnly:true一起使用时,允许没有所需权限(即数据库上的listCollections操作)的用户在执行访问控制时运行命令的标志。

When both authorizedCollections and nameOnly options are set to true, the command returns only those collections for which the user has privileges. authorizedCollectionsnameOnly选项都设置为true时,该命令仅返回用户具有权限的集合。For example, if a user has find action on specific collections, the command returns only those collections; or, if a user has find or any other action, on the database resource, the command lists all collections in the database.例如,如果用户对特定集合执行了find操作,则该命令仅返回这些集合;或者,如果用户对数据库资源执行了find或任何其他操作,则该命令将列出数据库中的所有集合。

The default value is false. 默认值为falseThat is, the user must have listCollections action on the database to run the command.也就是说,用户必须对数据库执行listCollections操作才能运行命令。

For a user who has listCollections action on the database, this option has no effect since the user has privileges to list the collections in the database.对于对数据库具有listCollections操作的用户,此选项无效,因为用户有权列出数据库中的集合。

When used without nameOnly: true, this option has no effect. 在没有nameOnly:true的情况下使用时,此选项无效。That is, the user must have the required privileges to run the command when access control is enforced. 也就是说,当执行访问控制时,用户必须具有运行命令所需的权限。Otherwise, the user is unauthorized to run the command.否则,用户无权运行该命令。

New in version 4.0.在版本4.0中新增

Changed in version 3.2.在版本3.2中更改

MongoDB 3.2 added support for document validation. MongoDB 3.2增加了对文档验证的支持。db.getCollectionInfos() includes document validation information in the options document.options文档中包括文档验证信息。

db.getCollectionInfos() does not return validationLevel and validationAction unless they are explicitly set.除非显式设置了validationLevelvalidationAction,否则不会返回它们。

Required Access所需访问权限

Since db.getCollectionInfos() is a wrapper around the listCollections, users must have the same privileges as listCollections when access control is enforced.由于db.getCollectionInfos()listCollections的包装器,因此在执行访问控制时,用户必须具有与listCollections相同的权限。

To run listCollections when access control is enforced, users must, in general, have privileges that grant listCollections action on the database. 要在强制访问控制时运行listCollections,用户通常必须具有授予数据库上的listCollections操作的权限。For example, the following privilege grants users to run db.getCollectionInfos() against the test database:例如,以下权限授予用户对test数据库运行db.getCollectionInfos()

{ resource: { db: "test", collection: "" }, actions: [ "listCollections" ] }

The built-in role read provides the privilege to run listCollections for a specific database.内置角色read提供了为特定数据库运行listCollections的权限。

Starting in version 4.0, however, user without the required privilege can run the command with both authorizedCollections and nameOnly options set to true. 但是,从版本4.0开始,没有所需权限的用户可以在authorizedCollectionsnameOnly选项设置为true的情况下运行命令。In this case, the command returns just the name and type of the collection(s) to which the user has privileges.在这种情况下,该命令只返回用户有权访问的集合的名称和类型。

For example, consider a user with a role that grants just the following privilege:例如,考虑一个用户的角色只授予以下权限:

{ resource: { db: "test", collection: "foo" }, actions: [ "find" ] }

The user can run the command if the command includes both authorizedCollections and nameOnly options set to true(with or without the filter option):如果该命令同时包含authorizedCollectionsnameOnly选项,并将其设置为true(带或不带筛选器选项),则用户可以运行该命令:

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

The operation returns the name and type of the foo collection.该操作返回foo集合的名称和类型。

However, the following operations (with or without the filter option) error for the user without the required access:但是,对于没有所需访问权限的用户,以下操作(有或没有filter选项)会出错:

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

show collections显示集合

Starting in version 4.0 of the mongo shell, show collections is equivalent to:mongo shell 4.0版开始,show collections相当于:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • For users with the required access, show collections lists the non-system collections for the database.对于具有所需访问权限的用户,show collections列出了数据库的非系统集合。
  • For users without the required access, show collections lists only the collections for which the users has privileges.对于没有所需访问权限的用户,show collections仅列出用户具有权限的集合。

Earlier MongoDB Versions早期MongoDB版本

When a version 4.0 mongo shell is connected to an earlier version MongoDB deployment that does not support authorizedCollections and nameOnly options,当4.0版mongo shell连接到不支持authorizedCollectionsnameOnly选项的早期版本MongoDB部署时,

Behavior行为

Client Disconnection客户端断开连接

Starting in MongoDB 4.2, if the client that issued the db.getCollectionInfos() disconnects before the operation completes, MongoDB marks the db.getCollectionInfos() for termination (i.e. killOp on the operation).从MongoDB 4.2开始,如果发出db.getCollectionInfos()的客户端在操作完成之前断开连接,MongoDB将db.getCollectionInfos()标记为终止(即操作上的killOp)。

Replica Set Member State Restriction副本集成员国限制

Starting in MongoDB 4.4, to run on a replica set member, listCollections operations require the member to be in PRIMARY or SECONDARY state. 从MongoDB 4.4开始,要在副本集成员上运行,listCollections操作要求该成员处于PRIMARYSECONDARY状态。If the member is in another state, such as STARTUP2, the operation errors.如果成员处于其他状态,如STARTUP2,则操作出错。

In previous versions, the operations can also be run when the member is in STARTUP2. 在以前的版本中,也可以在成员处于STARTUP2时运行操作。However, the operations wait until the member transitions to RECOVERING.但是,这些操作将一直等到成员转换到RECOVERING

Example示例

The following returns information for all collections in the example database:下面将返回example数据库中所有集合的信息:

use example
db.getCollectionInfos()

The method returns an array of documents that contain collection information:该方法返回包含集合信息的文档数组:

[
   {
      "name" : "employees",
      "type" : "collection",
      "options" : {
         "flags" : 1,
         "validator" : {
            "$or" : [
               {
                  "phone" : {
                     "$exists" : true
                  }
               },
               {
                  "email" : {
                     "$exists" : true
                  }
               }
            ]
         }
      },
      "info" : {
         "readOnly" : false,
         "uuid" : UUID("222e18ca-4a10-4a42-a8fe-c39255cc4c55")
      },
      "idIndex" : {
         "v" : 2,
         "key" : {
            "_id" : 1
         },
         "name" : "_id_",
         "ns" : "example.employees"
      }
   },
   {
      "name" : "products",
      "type" : "collection",
      "options" : {
         "flags" : 1
      },
      "info" : {
         "readOnly" : false,
         "uuid" : UUID("1bc898b2-3b91-45e4-9d8b-0be462d5a157")
      },
      "idIndex" : {
         "v" : 2,
         "key" : {
            "_id" : 1
         },
         "name" : "_id_",
         "ns" : "example.products"
      }
   },
   {
      "name" : "mylogs",
      "type" : "collection",
      "options" : {
         "capped" : true,
         "size" : 256
      },
      "info" : {
         "readOnly" : true,
         "uuid" : UUID("8e62116d-b6a0-490a-808c-258ccb7ea947")
      },
      "idIndex" : {
         "v" : 2,
         "key" : {
            "_id" : 1
         },
         "name" : "_id_",
         "ns" : "example.mylogs"
      }
   }
]

To request collection information for a specific collection, specify the collection name when calling the method, as in the following:要请求特定集合的集合信息,请在调用方法时指定集合名称,如下所示:

use example
db.getCollectionInfos( { name: "employees" } )

The method returns an array with a single document that details the collection information for the employees collection in the example database.该方法返回一个包含单个文档的数组,该文档详细说明了example数据库中employees集合的集合信息。

[
   {
      "name" : "employees",
      "type" : "collection",
      "options" : {
         "flags" : 1,
         "validator" : {
            "$or" : [
               {
                  "phone" : {
                     "$exists" : true
                  }
               },
               {
                  "email" : {
                     "$exists" : true
                  }
               }
            ]
         }
      },
      "info" : {
         "readOnly" : false,
         "uuid" : UUID("222e18ca-4a10-4a42-a8fe-c39255cc4c55")
      },
      "idIndex" : {
         "v" : 2,
         "key" : {
            "_id" : 1
         },
         "name" : "_id_",
         "ns" : "example.employees"
      }
   }
]

You can specify a filter on any of the fields returned by db.getCollectionInfos().您可以在db.getCollectionInfos()返回的任何字段上指定筛选器。

For example, the following command returns information for all collections in the example database where info.readOnly is true:例如,以下命令返回example数据库中info.readOnlytrue的所有集合的信息:

use example
db.getCollectionInfos( { "info.readOnly" : true } )

The command returns the following:该命令返回以下内容:

[
   {
      "name" : "mylogs",
      "type" : "collection",
      "options" : {
         "capped" : true,
         "size" : 256
      },
      "info" : {
         "readOnly" : true,
         "uuid" : UUID("8e62116d-b6a0-490a-808c-258ccb7ea947")
      },
      "idIndex" : {
         "v" : 2,
         "key" : {
            "_id" : 1
         },
         "name" : "_id_",
         "ns" : "example.mylogs"
      }
   }
]
←  db.getCollection()db.getCollectionNames() →