【问题标题】:How can I list all collections in the MongoDB shell?如何列出 MongoDB shell 中的所有集合?
【发布时间】:2012-02-10 13:40:17
【问题描述】:

在 MongoDB shell 中,如何列出我正在使用的当前数据库的所有集合?

【问题讨论】:

    标签: mongodb mongo-shell


    【解决方案1】:

    你可以...

    JavaScript(外壳):

    db.getCollectionNames()
    

    Node.js:

    db.listCollections()
    

    非 JavaScript(仅限 shell):

    show collections
    

    我之所以称之为非 JavaScript 是因为:

    $ mongo prodmongo/app --eval "show collections"
    MongoDB shell version: 3.2.10
    connecting to: prodmongo/app
    2016-10-26T19:34:34.886-0400 E QUERY    [thread1] SyntaxError: missing ; before statement @(shell eval):1:5
    
    $ mongo prodmongo/app --eval "db.getCollectionNames()"
    MongoDB shell version: 3.2.10
    connecting to: prodmongo/app
    [
        "Profiles",
        "Unit_Info"
    ]
    

    如果你真的想要那种甜蜜、甜蜜的show collections 输出,你可以:

    $ mongo prodmongo/app --eval "db.getCollectionNames().join('\n')"
    MongoDB shell version: 3.2.10
    connecting to: prodmongo/app
    Profiles
    Unit_Info
    

    【讨论】:

    • 不错的功能。您可以遍历名称数组以执行其他操作(例如,从集合中删除所有项目)。
    • 我们能否得到db.listCollections() 作为此处显示的答案并以绿色选中?否则,人们在得到这个答案时犯了我无数次犯过的同样的错误——并尝试使用db.getCollectionNames,错误又回来了db.collectionNames is not a function
    • @niftylettuce 这个问题是关于 MongoDB shell,而不是 node.js 驱动程序。 db.getCollectionNames() 仍然是 shell 的正确答案。
    【解决方案2】:
    > show collections
    

    将列出当前选定数据库中的所有集合,如命令行帮助 (help) 中所述。

    【讨论】:

    • 您不能在脚本中使用 show collections 输出,但可以执行 x=db.getCollectionNames() 来获取所有名称的数组。
    • 每次收藏后列出的两个数字是什么意思?两种尺寸?以content 1145.586MB / 1506.855MB 为例。
    • @Dan:我有一段时间没有使用 MongoDB,但我最好的猜测是,它是存储在集合中的数据大小与分配给该集合的总量(处理次要更新和增长,而不必为整个集合的内容不断重新分配新空间)。
    【解决方案3】:

    如何列出我正在使用的当前数据库的所有集合?

    三种方法

    • show collections
    • show tables
    • db.getCollectionNames()

    列出所有数据库

    show dbs
    

    进入或使用给定的数据库:

    use databasename
    

    列出所有收藏

    show collections
    

    输出:

    collection1
    collection2
    system.indexes
    

    (或)

    show tables
    

    输出:

    collection1
    collection2
    system.indexes
    

    (或)

    db.getCollectionNames()
    

    输出:

    [ "collection1", "collection2", "system.indexes" ]
    

    进入或使用给定的集合

    use collectionname
    

    【讨论】:

    • +1 以获得最完整的答案。说明 show tables 对于那些来自关系 dbms 背景的人来说非常有帮助。
    • 不,use 是使用数据库,与集合无关
    • 我们也可以使用 db.collections
    【解决方案4】:

    > show tables

    它给出的结果与 Cameron 的答案相同。

    【讨论】:

      【解决方案5】:

      除了其他人建议的选项:

      show collections  // Output every collection
      show tables
      db.getCollectionNames() // Shows all collections as a list
      

      如果您想知道每个集合是如何创建的(例如,它是具有特定大小的封顶集合),还有另一种非常方便的方法:

      db.system.namespaces.find()
      

      【讨论】:

        【解决方案6】:

        首先,您需要使用数据库来显示其中的所有集合/表。

        >show dbs
        users 0.56787GB
        test (empty)
        >db.test.help() // this will give you all the function which can be used with this db
        >use users
        >show tables //will show all the collection in the db
        

        【讨论】:

          【解决方案7】:

          试试:

          help // To show all help methods
          show dbs  // To show all dbs
          use dbname  // To select your db
          show collections // To show all collections in selected db
          

          【讨论】:

            【解决方案8】:

            您可以使用show tablesshow collections

            【讨论】:

            • @LalitKumarB:这是怎么回事?根据其他答案,这实际上是可行的合适答案。至少这是一种尝试回答。它是什么,是对已经发布了多个正确答案的非常古老的问题的答案。
            【解决方案9】:

            用于显示MongoDB数据库中所有集合的命令是

            show collections
            

            在运行show collections 命令之前,您必须选择数据库:

            use mydb // mydb is the name of the database being selected
            

            要查看所有数据库,可以使用命令

            show dbs // Shows all the database names present
            

            如需了解更多信息,请访问 Getting Started

            【讨论】:

              【解决方案10】:

              如果要显示 MongoDB shell(命令行)中的所有集合,请使用 shell 帮助程序,

              show collections
              

              显示当前数据库的所有集合。 如果您想从应用程序中获取所有集合列表,则可以使用 MongoDB 数据库方法

              db.getCollectionNames()
              

              有关 MongoDB shell 帮助程序的更多信息,您可以查看 mongo Shell Quick Reference

              【讨论】:

                【解决方案11】:

                以下命令在 mongoshell 上很常见。

                show databases
                show collections
                

                还有,

                show dbs
                use mydb
                db.getCollectionNames()
                

                有时查看所有集合以及作为整个命名空间一部分的集合上的索引很有用:

                你可以这样做:

                db.getCollectionNames().forEach(function(collection) {
                    indexes = db[collection].getIndexes();
                    print("Indexes for " + collection + ":");
                    printjson(indexes);
                });
                

                在这三个命令和这个sn-p之间,你应该被很好的覆盖了!

                【讨论】:

                  【解决方案12】:

                  我认为最大的困惑之一是使用 mongo(或交互式/混合 shell)与 mongo --eval(或纯 JavaScript shell)之间的区别。我将这些有用的文档放在手边:

                  下面是一个脚本示例,您可以使用 show 命令执行其他操作:

                  # List all databases and the collections in them
                  
                  mongo --eval "
                      db.getMongo().getDBNames().forEach(
                          function(v, i){
                              print(
                                  v + '\n\t' +
                                  db.getSiblingDB(v).getCollectionNames().join('\n\t')
                              )
                          }
                      )
                  "
                  

                  注意:这非常适合作为单线。 (但在 StackOverflow 上看起来很糟糕。)

                  mongo --eval "db.getMongo().getDBNames().forEach(function(v, i){print(v+'\n\t'+db.getSiblingDB(v).getCollectionNames().join('\n\t'))})"
                  

                  【讨论】:

                    【解决方案13】:
                    > show dbs        
                    anuradhfirst  0.000GB
                    local         0.000GB
                    > use anuradhfirst
                    switched to db anuradhfirst
                    > show collections
                    record
                    
                    • 使用mongo 连接MongoDB 数据库。这将启动连接。
                    • 然后运行show dbs 命令。这将显示所有现有/可用的数据库。
                    • 然后选择您想要的database。在上面它是anuradhfirst。然后运行use anuradhfirst。这将切换到您想要的数据库。
                    • 然后运行show collections 命令。这将显示您选择的数据库中的所有collections

                    【讨论】:

                    • 这个答案显示了获取收藏列表的正确步骤。
                    【解决方案14】:

                    用于切换到数据库。

                    作者:

                    使用 {your_database_name} 示例:

                    use friends
                    

                    其中friends 是您的数据库的名称。

                    然后写:

                    db.getCollectionNames()
                    show collections
                    

                    这将为您提供集合的名称。

                    【讨论】:

                    • 这与之前的答案有何不同?
                    【解决方案15】:
                     1. show collections; // Display all collections
                     2. show tables     // Display all collections
                     3. db.getCollectionNames();   // Return array of collection. Example :[ "orders", "system.profile" ]
                    

                    每个系列的详细信息:

                    db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
                    
                    • 对于具有所需访问权限(授予对数据库的 listCollections 操作的权限)的用户,该方法会列出数据库的所有集合的名称。
                    • 对于没有所需访问权限的用户,该方法仅列出用户有权访问的集合。例如,如果用户在数据库中找到特定集合,则该方法将仅返回该集合。

                    根据搜索字符串列出集合列表。

                    db.getCollectionNames().filter(function (CollectionName) { return /<Search String>/.test(CollectionName) })
                    

                    示例:查找名称中包含“import”的所有集合

                    db.getCollectionNames().filter(function (CollectionName) { return /import/.test(CollectionName) })
                    

                    【讨论】:

                    • 我可以得到包含过滤器之类名称的集合列表
                    • @Praveen - 我已经更新了我的答案以包括对您的案例的回答。希望有帮助
                    • 谢谢阿米特什。我写了我的脚本 db.getCollectionNames().forEach(function(collName) { if (collName.startsWith("TestCollection_")) { print("droping index for " + collName); db.getCollection(collName).dropIndex(" ts_1"); } });
                    【解决方案16】:

                    在 >=2.x 上,你可以这样做

                    db.listCollections()
                    

                    在 1.x 上你可以做到

                    db.getCollectionNames()
                    

                    【讨论】:

                    • as @JohnnyHK pointed out 这仅适用于 node driver 而不是 mongo shell 每个 OP 问题
                    • @JeffPuckettII 我不使用 Node。这在 mongo shell 中非常适合我。我想知道为什么它不会?
                    • 我正在运行 MongoDB shell 版本:3.2.6,当我运行 db.getCollectionNames() 时,我得到 [ "users" ],因为我有一个 users 集合。如果我尝试db.listCollections(),则结果为[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
                    【解决方案17】:

                    列出来自mongo shell 的所有集合:

                    • db.getCollectionNames()
                    • 显示收藏
                    • 显示表格

                    注意:集合将显示您所在的当前数据库 目前

                    【讨论】:

                    • 这与之前的答案有何不同?
                    【解决方案18】:

                    显示收藏

                    一旦切换到数据库,此命令通常在 MongoDB shell 上运行。

                    【讨论】:

                      【解决方案19】:

                      如果有人使用 Python 和 PyMongo

                      db.list_collection_names()

                      【讨论】:

                        【解决方案20】:

                        对于使用 WiredTiger 存储引擎的 MongoDB 3.0 部署,如果 你从一个版本的 mongo shell 运行 db.getCollectionNames() 3.0之前的版本或者3.0之前的驱动兼容版本, db.getCollectionNames() 将不返回任何数据,即使有 现有的集合。

                        更多详情请参考this

                        【讨论】:

                        【解决方案21】:

                        为此,我使用listCollections(支持 MongoDB 3.0 及更高版本)。

                        例子:

                        db.runCommand({ listCollections: 1, filter: {}, nameOnly: true });
                        

                        要获取更多信息,例如集合的索引:

                        db.runCommand({ listCollections: 1, filter: {}, nameOnly: false });
                        

                        仅打印集合名称:

                        db.runCommand({ listCollections: 1, filter: {}, nameOnly: true }).cursor.firstBatch.forEach(v => {print(v.name)})
                        

                        我觉得这提供了更多的灵活性。

                        阅读更多:listCollections

                        【讨论】:

                          【解决方案22】:
                          show collections
                          

                          show tables
                          

                          db.getCollectionNames();
                          

                          【讨论】:

                          • 这与之前的答案有何不同?
                          【解决方案23】:

                          mongo shell 中使用以下命令:

                          show collections
                          

                          【讨论】:

                          • 这与之前的答案有何不同?
                          猜你喜欢
                          • 2014-08-15
                          • 2023-01-13
                          • 2018-03-04
                          • 2012-06-30
                          • 1970-01-01
                          • 1970-01-01
                          • 2018-11-28
                          • 2021-07-05
                          相关资源
                          最近更新 更多