如何列出 MongoDB shell 中的所有集合?

Posted

技术标签:

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

在 MongoDB 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.getCollectionNames() was removed in favor of db.listCollections() 我们能否得到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)之间的区别。我将这些有用的文档放在手边:

Differences Between Interactive and Scripted mongo Mongo Shell Command Helpers

下面是一个脚本示例,您可以使用 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')
            )
        
    )
"

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

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。

【讨论】:

Related meta post.【参考方案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

【讨论】:

这与之前的答案有何不同?

以上是关于如何列出 MongoDB shell 中的所有集合?的主要内容,如果未能解决你的问题,请参考以下文章

如何列出 mongo shell 中的所有数据库?

如何列出 mongo shell 中的所有数据库?

如何在mongoDB中列出集合的所有者

sh 如何在mongoDb中列出所有集合?

MongoDB:如何在 MongoDB Shell 中删除集合的所有记录?

mongodb shell