如何在MongoDB Shell中列出所有集合?


Answers:


1157

你可以做...

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

不错的功能。您可以遍历名称数组以执行其他操作(例如,从集合中删除所有项目)。
Hilton Perantunes 2015年


6
我们能否获得db.listCollections()此处显示的答案并以绿色选中?否则,人们在回答这个问题时会犯同样的错误,而我却无数次尝试使用db.getCollectionNames该错误,错误再次出现db.collectionNames is not a function
niftylettuce

22
@niftylettuce这个问题是关于MongoDB shell的,而不是关于node.js驱动程序的。db.getCollectionNames()仍然是shell的正确答案。
JohnnyHK '16

424
> show collections

将按照命令行帮助(help)中的说明列出当前所选数据库中的所有集合。


2
您不能在脚本中使用show collections输出,但是可以执行x = db.getCollectionNames()来获取所有名称的数组。
ceteras

1
每次收集后列出的两个数字是什么意思?两种尺寸?content 1145.586MB / 1506.855MB例如。
Dan Dascalescu 2014年

@Dan:我已经有一段时间没有使用MongoDB了,但我最大的猜想是它是存储在集合中的数据大小与分配给该集合的总量的总和(处理较小的更新和增长而不必不断重新分配)整个集合内容的新空间)。
卡梅伦

265

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

三种方法

  • 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
+1可获得最完整的答案。show tables对于那些来自关系dbms背景的人来说,说明非常有帮助。
杰夫·普基特

8
不,use是使用数据库,与集合无关
sjmeverett

1
我们也可以使用db.collections
Biplab Malakar '18


30

除了其他人建议的选项之外:

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

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

db.system.namespaces.find()

23

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

>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

15

您可以使用show tablesshow collections


2
@LalitKumarB:怎么会这样?根据其他答案,这可能是实际可行的适当答案。至少是尝试回答。它是对非​​常老的问题的答案,已经发布了多个正确答案。
Roope Hakulinen


12

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

show collections

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

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

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

show dbs // Shows all the database names present

有关更多信息,请访问入门



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);
});

在这三个命令和这段代码之间,您应该被很好地覆盖!


8

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

这是编写脚本的示例,您可以用其他方法编写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'))})"

这非常有用,谢谢。
Marco Craveiro

4

在> = 2.x上,您可以执行

db.listCollections()

在1.x上,您可以执行

db.getCollectionNames()

1
正如@JohnnyHK 指出的那样,这仅适用于节点驱动程序,不适用于每个OP问题的mongo shell
Jeff Puckett

@JeffPuckettII我不使用Node。在mongo shell中,这对我来说非常合适。我不知道为什么不会呢?
阿尼鲁德·乔希

1
我正在运行MongoDB Shell版本:3.2.6,当我运行时db.getCollectionNames()我得到了,[ "users" ]因为我有一个用户集合。如果我尝试的db.listCollections()话,结果会是[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett


3

用于切换到数据库。

通过:

使用{your_database_name}示例:

use friends

哪里 friends数据库的名称。

然后写:

db.getCollectionNames()
show collections

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


这与以前的答案有何不同?
Peter Mortensen

2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • 使用连接到MongoDB数据库mongo。这将启动连接。
  • 然后运行show dbs命令。这将显示所有现有/可用的数据库。
  • 然后选择database您想要的。在上面是anuradhfirst。然后运行use anuradhfirst。这将切换到所需的数据库。
  • 然后运行show collections命令。这将显示collections所选数据库的所有内部内容。

1

显示收藏

一旦切换到数据库,此命令通常在MongoDB Shell上有效。


1

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

有关更多详细信息,请参阅




0

我用 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


0
 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(“删除索引为” + collName); db.getCollection(collName).dropIndex(“ ts_1“);}});
Parveen

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.