Bagaimana saya bisa mendaftar semua koleksi di shell MongoDB?

757

Di shell MongoDB, bagaimana cara membuat daftar semua koleksi untuk database saat ini yang saya gunakan?

penggiling kopi
sumber

Jawaban:

1159

Anda dapat melakukan...

JavaScript (shell):

db.getCollectionNames()

Node.js:

db.listCollections()

Non-JavaScript (hanya shell):

show collections

Alasan saya menyebutnya non-JavaScript adalah karena:

$ 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"
]

Jika Anda benar-benar menginginkan hasil yang manis dan manis itu show collections, Anda dapat:

$ mongo prodmongo/app --eval "db.getCollectionNames().join('\n')"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
Profiles
Unit_Info
AdaTheDev
sumber
Fitur yang bagus. Anda dapat mengulangi melalui array nama untuk melakukan sesuatu yang lain (mis. Hapus semua item dari koleksi).
Hilton Perantunes
6
Bisakah kita mendapatkan db.listCollections()jawaban yang ditunjukkan di sini dan check in hijau? Kalau tidak, orang membuat kesalahan yang sama yang saya lakukan berkali-kali ketika mereka sampai pada jawaban ini - dan berusaha untuk menggunakan db.getCollectionNamesdan kesalahan itu kembali db.collectionNames is not a function.
niftylettuce
22
@niftylettuce Pertanyaan ini adalah tentang shell MongoDB, bukan driver node.js. db.getCollectionNames()masih merupakan jawaban yang tepat untuk shell.
JohnnyHK
424
> show collections

akan mencantumkan semua koleksi di DB yang saat ini dipilih, sebagaimana dinyatakan dalam bantuan baris perintah ( help).

Cameron
sumber
2
Anda tidak dapat menggunakan output koleksi acara dalam skrip, tetapi orang dapat melakukan x = db.getCollectionNames () untuk mendapatkan array dari semua nama.
ceteras
1
Apa arti kedua angka yang tercantum setelah setiap koleksi? Dua jenis ukuran? content 1145.586MB / 1506.855MBsebagai contoh.
Dan Dascalescu
@Dan: Saya belum pernah menggunakan MongoDB untuk sementara waktu, tapi tebakan terbaik saya adalah ukuran data yang disimpan dalam koleksi vs. jumlah total yang dialokasikan untuk koleksi itu (untuk menangani pembaruan dan pertumbuhan kecil tanpa harus terus-menerus mengalokasikan ulang ruang baru untuk seluruh isi koleksi).
Cameron
265

Bagaimana cara mendaftar semua koleksi untuk database saat ini yang saya gunakan?

Tiga metode

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

Untuk membuat daftar semua basis data :

show dbs

Untuk memasukkan atau menggunakan database yang diberikan:

use databasename

Untuk membuat daftar semua koleksi :

show collections

Keluaran:

collection1
collection2
system.indexes

(atau)

show tables

Keluaran:

collection1
collection2
system.indexes

(atau)

db.getCollectionNames()

Keluaran:

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

Untuk masuk atau menggunakan koleksi yang diberikan

use collectionname
Bharadwaja Bapatla
sumber
1
+1 untuk jawaban paling lengkap. ilustrasi show tablessangat membantu bagi mereka yang datang dari latar belakang dbms relasional.
Jeff Puckett
9
tidak, useadalah menggunakan database, tidak ada hubungannya dengan koleksi
sjmeverett
1
kita juga bisa menggunakan db.collections
Biplab Malakar
53

> show tables

Ini memberikan hasil yang sama dengan jawaban Cameron.

Kevin Meredith
sumber
30

Terlepas dari opsi yang disarankan oleh orang lain:

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

Ada juga cara lain yang bisa sangat berguna jika Anda ingin tahu bagaimana masing-masing koleksi dibuat (misalnya, itu adalah koleksi tertutup dengan ukuran tertentu):

db.system.namespaces.find()
Salvador Dali
sumber
23

Pertama, Anda perlu menggunakan database untuk menampilkan semua koleksi / tabel di dalamnya.

>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
Tarun Gupta
sumber
15

Anda bisa menggunakan show tablesatau show collections.

lxg
sumber
2
@LalitKumarB: Kenapa bisa begitu? Berdasarkan jawaban lain, itulah jawaban yang cocok untuk hal ini yang sebenarnya mungkin berhasil. Setidaknya itu adalah upaya untuk menjawab. Apa itu, adalah jawaban untuk pertanyaan yang sangat lama yang sudah diposting beberapa jawaban yang benar.
Roope Hakulinen
14

Mencoba:

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
Indrajeet Singh
sumber
12

Perintah yang digunakan untuk menampilkan semua koleksi di database MongoDB adalah

show collections

Sebelum menjalankan show collectionsperintah, Anda harus memilih basis data:

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

Untuk melihat semua database, Anda bisa menggunakan perintah

show dbs // Shows all the database names present

Untuk informasi lebih lanjut, kunjungi lihat Memulai .

kkk
sumber
11

Jika Anda ingin menampilkan semua koleksi dari shell MongoDB (baris perintah), gunakan bantuan shell,

show collections

yang menunjukkan semua koleksi untuk database saat ini. Jika Anda ingin mendapatkan semua daftar koleksi dari aplikasi Anda maka Anda dapat menggunakan metode database MongoDB

db.getCollectionNames()

Untuk informasi lebih lanjut tentang pembantu shell MongoDB, Anda dapat melihat mongoReferensi Cepat Shell .

Engr. Hasanuzzaman Sumon
sumber
11

Perintah-perintah berikut pada mongoshell adalah umum.

show databases
show collections

Juga,

show dbs
use mydb
db.getCollectionNames()

Terkadang berguna untuk melihat semua koleksi serta indeks pada koleksi yang merupakan bagian dari keseluruhan namespace:

Begini cara Anda melakukan itu:

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

Antara tiga perintah dan cuplikan ini, Anda harus terlindungi dengan baik!

Baik-baik saja
sumber
8

Saya pikir salah satu kebingungan terbesar adalah perbedaan antara apa yang dapat Anda lakukan dengan mongo(atau shell interaktif / hybrid) vs mongo --eval(atau shell JavaScript murni). Saya menyimpan dokumen yang bermanfaat ini:

Berikut adalah contoh skrip yang mungkin Anda lakukan dengan showperintah:

# 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')
            )
        }
    )
"

Catatan: Itu berfungsi sangat baik sebagai one-liner. (Tapi itu terlihat mengerikan di Stack Overflow.)

mongo --eval "db.getMongo().getDBNames().forEach(function(v, i){print(v+'\n\t'+db.getSiblingDB(v).getCollectionNames().join('\n\t'))})"
Bruno Bronosky
sumber
Ini sangat berguna, terima kasih.
Marco Craveiro
4

Pada> = 2.x, Anda dapat melakukannya

db.listCollections()

Pada 1.x Anda bisa melakukannya

db.getCollectionNames()
Aniruddh Joshi
sumber
1
seperti @JohnnyHK tunjukkan ini hanya berlaku untuk driver node dan bukan shell mongo per pertanyaan OP
Jeff Puckett
@ JeffPuckettII Saya tidak menggunakan Node. Ini bekerja dengan baik untuk saya di dalam kulit mongo. Saya bertanya-tanya mengapa tidak?
Aniruddh Joshi
1
Saya menjalankan MongoDB versi shell: 3.2.6, dan ketika saya menjalankan db.getCollectionNames()saya dapatkan [ "users" ]karena saya memiliki koleksi pengguna. Jika saya coba db.listCollections()maka hasilnya[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett
3

Daftar semua koleksi dari mongoshell:

  • db.getCollectionNames ()
  • tampilkan koleksi
  • tampilkan tabel

Catatan: Koleksi akan ditampilkan dari basis data saat ini di mana Anda berada saat ini

Hasib Kamal
sumber
Bagaimana ini berbeda dari jawaban sebelumnya?
Peter Mortensen
3

Untuk beralih ke database.

Oleh:

gunakan contoh {your_database_name} :

use friends

dimana friends nama basis data Anda.

Lalu menulis:

db.getCollectionNames()
show collections

Ini akan memberi Anda nama koleksi.

Pandit Shashikant
sumber
Bagaimana ini berbeda dari jawaban sebelumnya?
Peter Mortensen
2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • terhubung dengan menggunakan database MongoDB mongo. Ini akan memulai koneksi.
  • lalu jalankan show dbsperintah. Ini akan menunjukkan kepada Anda semua database yang tersedia / tersedia.
  • lalu pilih yang databaseAnda inginkan. Di atas itu anuradhfirst. Kemudian jalankan use anuradhfirst. Ini akan beralih ke database yang Anda inginkan.
  • lalu jalankan show collectionsperintah. Ini akan menampilkan semua bagian collectionsdalam database yang Anda pilih.
Kaldera Chanaka
sumber
1

tampilkan koleksi

Perintah ini biasanya bekerja pada shell MongoDB setelah Anda beralih ke database.

PHINCY L PIOUS
sumber
1

Untuk penyebaran MongoDB 3.0 menggunakan mesin penyimpanan WiredTiger, jika Anda menjalankan db.getCollectionNames()dari versi mongo shell sebelum 3.0 atau versi driver sebelum versi yang kompatibel 3.0, tidak db.getCollectionNames()akan mengembalikan data, bahkan jika ada koleksi yang ada.

Untuk detail lebih lanjut, silakan merujuk ini .

Rahul
sumber
Meta post terkait .
Peter Mortensen
0
show collections

atau

show tables

atau

db.getCollectionNames();
nixxo_raa
sumber
Bagaimana ini berbeda dari jawaban sebelumnya?
Peter Mortensen
hanya meningkatkan akun saya.
nixxo_raa
0

Saya menggunakan listCollections(mendukung MongoDB 3.0 dan lebih tinggi) untuk tujuan ini.

Contoh:

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

Untuk mengambil informasi lebih lanjut seperti indeks koleksi:

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

Untuk mencetak hanya nama koleksi:

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

Saya merasa ini memberikan lebih banyak fleksibilitas.

Baca lebih lanjut: listCollections

Sahith Vibudhi
sumber
0
 1. show collections; // Display all collections
 2. show tables     // Display all collections
 3. db.getCollectionNames();   // Return array of collection. Example :[ "orders", "system.profile" ]

Informasi terperinci untuk setiap koleksi:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Untuk pengguna dengan akses yang diperlukan (hak istimewa yang memberikan tindakan listCollections pada database), metode ini mencantumkan nama semua koleksi untuk database.
  • Untuk pengguna tanpa akses yang diperlukan, metode ini hanya mencantumkan koleksi yang memiliki hak istimewa bagi pengguna. Misalnya, jika pengguna menemukan koleksi tertentu dalam database, metode akan mengembalikan koleksi itu saja.

Untuk daftar daftar koleksi berdasarkan string pencarian.

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

Contoh: Temukan semua koleksi yang memiliki "impor" pada namanya

db.getCollectionNames().filter(function (CollectionName) { return /import/.test(CollectionName) })
Amitesh
sumber
Bisakah saya mendapatkan daftar koleksi yang berisi beberapa nama seperti filter
Parveen
@Praveen - Saya telah memperbarui jawaban saya untuk menyertakan jawaban untuk Anda. Semoga itu bisa membantu
Amitesh
Terima kasih Amitesh. Saya menulis naskah saya db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("droping index for" + collName); db.getCollection (collName) .dropIndex (" ts_1 ");}});
Parveen
-1

Gunakan perintah berikut dari mongoshell:

show collections
Anoop Sharma
sumber
jika Anda menempatkan perintah Anda di backticks, salah memilih -1 Anda.
mengacaukan
Bagaimana ini berbeda dari jawaban sebelumnya?
Peter Mortensen