MongoDBシェルですべてのコレクションを一覧表示するにはどうすればよいですか?


757

MongoDBシェルで、使用している現在のデータベースのすべてのコレクションを一覧表示するにはどうすればよいですか?

回答:


1159

できるよ...

JavaScript(シェル):

db.getCollectionNames()

Node.js:

db.listCollections()

非JavaScript(シェルのみ):

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

素晴らしい機能。名前の配列を反復処理して、他のことを行うことができます(たとえば、コレクションからすべての項目を削除する)。
ヒルトンペランチューンズ2015


6
我々は取得してくださいすることができdb.listCollections()、ここで示した答えとして、グリーンでチェック!そうでなければ、人々は私が数えきれないほど同じ間違いをし、彼らがこの答えにたどり着いたとき、それを使ってみるdb.getCollectionNamesとエラーが戻ってきdb.collectionNames is not a functionます。
niftylettuce 2015

22
@niftylettuceこの質問は、MongoDBシェルに関するものであり、node.jsドライバーに関するものではありません。db.getCollectionNames()それでもシェルの正しい答えです。
JohnnyHK 2016年

424
> show collections

コマンドラインヘルプ(help)に記載されているように、現在選択されているDB内のすべてのコレクションが一覧表示されます。


2
スクリプトでshow collections出力を使用することはできませんが、x = db.getCollectionNames()を実行してすべての名前の配列を取得できます。
ceteras 2013

1
すべてのコレクションの後にリストされている2つの数値はどういう意味ですか?サイズは2種類?content 1145.586MB / 1506.855MB例えば。
Dan Dascalescu 2014年

@Dan:私はしばらくの間MongoDBを使用していませんが、コレクションに格納されているデータのサイズと、そのコレクションに割り当てられた合計量の比較だと思います(マイナーアップデートと成長を処理するために、常に再割り当てする必要はありません)。コレクション全体のコンテンツ用の新しいスペース)。
キャメロン

265

使用している現在のデータベースのすべてのコレクションを一覧表示するにはどうすればよいですか?

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
最も完全な回答の+1。イラストレーションshow tablesは、リレーショナルdbmsのバックグラウンドを持っている人には非常に役立ちます。
Jeff Puckett、2016年

9
いいえ、useデータベースを使用することであり、コレクションとは関係ありません
sjmeverett

1
db.collectionsを使用することもできます
Biplab


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 tablesまたはを使用できますshow collections


2
@LalitKumarB:それはなぜですか?他の答えに基づいて、それは実際に働くかもしれないこれのための適切な答えです。少なくともそれは答える試みです。それは、すでに複数の正解が投稿されている非常に古い質問への回答です。
Roope Hakulinen 2015

14

試してください:

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

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

MongoDBシェル(コマンドライン)からすべてのコレクションを表示するには、シェルヘルパーを使用します。

show collections

現在のデータベースのすべてのコレクションが表示されます。アプリケーションからすべてのコレクションリストを取得する場合は、MongoDBデータベースメソッドを使用できます。

db.getCollectionNames()

MongoDBシェルヘルパーの詳細については、mongoシェルのクイックリファレンスをご覧ください。


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

3つのコマンドとこのスニペットの間では、十分にカバーされているはずです。


8

最大の混乱の1つは、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シェルには適用されません
Jeff Puckett

@JeffPuckettIIノードを使用しません。これは、mongoシェル内では完全に機能します。なぜそうならないのかしら?
Aniruddh Joshi、2016

1
私はMongoDBシェルバージョン3.2.6を実行しています。実行するdb.getCollectionNames()[ "users" ]、ユーザーコレクションがあるので取得します。私が試してみるとdb.listCollections()、結果は次のようになります[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett

3

mongoシェルからすべてのコレクションを一覧表示します。

  • db.getCollectionNames()
  • コレクションを表示
  • テーブルを表示

注:コレクションは、あなたがしている現在のデータベースから表示されます 現在、


これは以前の回答とどう違うのですか?
Peter Mortensen

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シェルで機能します。


1

WiredTigerストレージエンジンを使用したMongoDB 3.0デプロイメントの場合、db.getCollectionNames()3.0より前のバージョンのmongoシェルまたは3.0互換バージョンより前のバージョンのドライバーから実行すると、 db.getCollectionNames()既存のコレクションがある場合でもデータは返されません。

詳細については、を参照してくださいこの



0
show collections

または

show tables

または

db.getCollectionNames();

これは以前の回答とどう違うのですか?
Peter Mortensen

私のアカウントを改善することに他なりません。
nixxo_raa

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

フィルターなどの名前を含むコレクションのリストを取得できますか
Parveen

@Praveen-私はあなたのケースへの回答を含むように私の回答を更新しました。お
役に立てば幸い

アミテッシュに感謝します。スクリプトdb.getCollectionNames()。forEach(function(collName){if(collName.startsWith( "TestCollection_")){print( "droping index for" + collName); db.getCollection(collName).dropIndex( "を書いたts_1 ");}});
Parveen

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.