MongoDB kabuğundaki tüm koleksiyonları nasıl listeleyebilirim?


Yanıtlar:


1157

Yapabilirsin...

JavaScript (kabuk):

db.getCollectionNames()

node.js:

db.listCollections()

JavaScript olmayanlar (yalnızca kabuk):

show collections

Bu JavaScript olmayan diyorum nedeni:

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

Gerçekten bu tatlı ve tatlı ürünü show collectionsistiyorsanız, şunları yapabilirsiniz:

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

Güzel özellik. Başka bir şey yapmak için ad dizisini yineleyebilirsiniz (örn. Koleksiyonlardaki tüm öğeleri kaldırın).
Hilton Perantunes


6
db.listCollections()Burada gösterilen ve yeşil renkte işaretlenmiş olan cevabı alabilir miyiz ? Aksi takdirde insanlar bu yanıta geldiklerinde sayısız kez yaptığım aynı hatayı yapıyorlar - ve kullanmaya çalışıyorlar db.getCollectionNamesve hata geri geliyor db.collectionNames is not a function.
niftylettuce

22
@niftylettuce Bu soru node.js sürücüsü ile değil MongoDB kabuğuyla ilgilidir. db.getCollectionNames()kabuk için hala doğru cevaptır.
JohnnyHK

424
> show collections

komut satırı yardımında ( help) belirtildiği gibi, seçili olan DB'deki tüm koleksiyonları listeler .


2
Bir koleksiyonda show collections çıkışını kullanamazsınız, ancak tüm adların bir dizisini almak için x = db.getCollectionNames () yapılabilir.
ceteras

1
Her koleksiyondan sonra listelenen iki sayı ne anlama geliyor? İki tür boyut? content 1145.586MB / 1506.855MBÖrneğin.
Dan Dascalescu

@Dan: Bir süredir MongoDB kullanmadım, ama en iyi tahminim, koleksiyonda saklanan verilerin boyutu ile bu koleksiyona ayrılan toplam miktarın (sürekli olarak yeniden tahsis etmek zorunda kalmadan küçük güncellemeleri ve büyümeyi işlemek için) koleksiyonun içeriği için yeni alan).
Cameron

265

Kullandığım veritabanı için tüm koleksiyonları nasıl listeleyebilirim?

Üç yöntem

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

Tüm veritabanlarını listelemek için :

show dbs

Belirli bir veritabanını girmek veya kullanmak için:

use databasename

Tüm koleksiyonları listelemek için :

show collections

Çıktı:

collection1
collection2
system.indexes

(veya)

show tables

Çıktı:

collection1
collection2
system.indexes

(veya)

db.getCollectionNames()

Çıktı:

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

Belirli bir koleksiyona girmek veya kullanmak için

use collectionname

1
En eksiksiz cevap için +1. açıklamak show tablesilişkisel dbms kökenli gelenler için oldukça yararlıdır.
Jeff Puckett

9
hayır, usebir veritabanı kullanmaktır, koleksiyonları ile ilgisi yoktur
sjmeverett

1
Ayrıca db.collections kullanabiliriz
Biplab Malakar


30

Başkaları tarafından önerilen seçeneklerin dışında:

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

Koleksiyonların her birinin nasıl oluşturulduğunu bilmek istiyorsanız gerçekten kullanışlı olabilecek başka bir yol da vardır (örneğin, belirli bir boyuta sahip kapaklı bir koleksiyon):

db.system.namespaces.find()

23

Öncelikle içindeki tüm koleksiyonu / tabloları göstermek için bir veritabanı kullanmanız gerekir.

>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

Sen kullanabilir show tablesya show collections.


2
@LalitKumarB: Bu nasıl oluyor? Diğer cevaplara dayanarak, bunun gerçekten işe yarayabilecek uygun cevabıdır. En azından cevap verme girişimidir. Bu, zaten çok sayıda doğru cevabı olan çok eski bir sorunun cevabıdır.
Roope Hakulinen

14

Deneyin:

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 veritabanındaki tüm koleksiyonları görüntülemek için kullanılan komut

show collections

show collectionsKomutu çalıştırmadan önce veritabanını seçmelisiniz:

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

Tüm veritabanlarını görmek için şu komutu kullanabilirsiniz:

show dbs // Shows all the database names present

Daha fazla bilgi için, ziyaret bkz Başlarken .


11

MongoDB kabuğundaki (komut satırı) tüm koleksiyonları göstermek istiyorsanız, kabuk yardımcısını kullanın,

show collections

geçerli veritabanı için tüm koleksiyonları gösterir. Tüm koleksiyon listelerini uygulamanızdan almak istiyorsanız MongoDB veritabanı yöntemini kullanabilirsiniz

db.getCollectionNames()

MongoDB kabuk yardımcısı hakkında daha fazla bilgi için mongoShell Hızlı Referansı'nı görebilirsiniz .


11

Mongoshell'de aşağıdaki komutlar yaygındır.

show databases
show collections

Ayrıca,

show dbs
use mydb
db.getCollectionNames()

Bazen tüm koleksiyonları ve koleksiyonlardaki genel ad alanının bir parçası olan dizinleri görmek yararlı olabilir:

Bunu nasıl yapacağınız aşağıda açıklanmıştır:

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

Üç komut ve bu snippet arasında, iyi korunmalısınız!


8

Bence en büyük karışıklıklardan biri mongo(veya etkileşimli / karma kabuk) ile mongo --eval(ya da saf bir JavaScript kabuğu) ne yapabileceğiniz arasındaki farktır . Bu yararlı belgeleri elimde tutuyorum:

showKomutlarla başka türlü yapabilecekleriniz için komut dosyası örneği :

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

Not: Bu, bir astar olarak gerçekten iyi çalışır. (Ancak Stack Overflow'da korkunç görünüyor.)

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

Bu son derece yararlı, teşekkürler.
Marco Craveiro

4

> = 2.x'te şunları yapabilirsiniz

db.listCollections()

1.x ile yapabilirsiniz

db.getCollectionNames()

1
@JohnnyHK , bunun OP düğümü için sadece düğüm sürücüsü için geçerli olduğunu ve mongo kabuğu için geçerli olmadığını belirtiyor
Jeff Puckett,

@JeffPuckettII Düğüm kullanmıyorum. Bu benim için mongo kabuğunda mükemmel çalışıyor. Neden olmasın acaba?
Aniruddh Joshi

1
3.2.6 ve ben çalıştırdığınızda: Ben MongoDB kabuk sürümünü çalıştırıyorum db.getCollectionNames()alıyorum [ "users" ]ben kullanıcılar koleksiyonum var çünkü. Eğer db.listCollections()[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
denersem

3

Kabuktaki tüm koleksiyonları listele mongo:

  • db.getCollectionNames ()
  • koleksiyonları göster
  • tabloları göster

Not: Koleksiyonlar, şu anda bulunduğunuz geçerli veritabanından gösterilir


Bu önceki cevaplardan nasıl farklı?
Peter Mortensen

3

Veritabanına geçmek için.

Tarafından:

{alan_adiniz_adı} örneğini kullanın :

use friends

friendsveritabanınızın adı nerede .

Sonra yaz:

db.getCollectionNames()
show collections

Bu size koleksiyonların adını verecektir.


Bu önceki cevaplardan nasıl farklı?
Peter Mortensen

2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • kullanarak MongoDB veritabanına bağlanın mongo. Bu bağlantıyı başlatacaktır.
  • sonra show dbskomutu çalıştırın . Bu size tüm mevcut / mevcut veritabanlarını gösterecektir.
  • sonra databaseistediğinizi seçin . Yukarıda anuradhfirst. Sonra koş use anuradhfirst. Bu, istediğiniz veritabanına geçecektir.
  • sonra show collectionskomutu çalıştırın . Bu, collectionsseçtiğiniz veritabanının içindeki tüm öğeleri gösterir .

1

koleksiyonları göster

Bu komut, veritabanına geçtikten sonra genellikle MongoDB kabuğunda çalışır.


1

WiredTiger depolama motorunu kullanan MongoDB 3.0 dağıtımları için, db.getCollectionNames()mongo kabuğunun 3.0'dan önceki bir sürümünden veya 3.0 uyumlu sürümden önceki bir sürücü sürümünden çalıştırıyorsanız, db.getCollectionNames()mevcut koleksiyonlar olsa bile veri döndürmez.

Daha fazla detay için bakınız bu .




0

listCollectionsBu amaçla kullanıyorum (MongoDB 3.0 ve üstü).

Misal:

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

Koleksiyonun dizini gibi daha fazla bilgi almak için:

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

Yalnızca koleksiyon adlarını yazdırmak için:

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

Bunun daha fazla esneklik sağladığını hissediyorum.

Daha fazla bilgi için: 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" ]

Her koleksiyon için ayrıntılı bilgi:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Gerekli erişime sahip kullanıcılar için (veritabanında listCollections eylemi veren ayrıcalıklar), yöntem veritabanı için tüm koleksiyonların adlarını listeler.
  • Gerekli erişimi olmayan kullanıcılar için, yöntem yalnızca kullanıcıların ayrıcalıklarına sahip olduğu koleksiyonları listeler. Örneğin, bir kullanıcı veritabanındaki belirli bir koleksiyonu bulursa, yöntem yalnızca bu koleksiyonu döndürür.

Bir arama dizesine dayalı koleksiyon listesini listelemek için.

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

Örnek: Adında "içe aktar" olan tüm koleksiyonu bulun

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

Filtre gibi bir ad içeren koleksiyon listesini alabilir miyim
Parveen

@Praveen - Cevabınızı size davanın cevabını içerecek şekilde güncelledim. Umut yardımcı olur
Amitesh

Teşekkürler Amitesh. Komutumu db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("" + collName) için bırakma dizini; db.getCollection (collName) .dropIndex (" ts_1 ");}});
Parveen

-1

Kabuktan aşağıdaki komutu kullanın mongo:

show collections

emrinizi geri çukurlara koyarsanız, -1'inizden kötü oy alırsınız.
Mart'ta

Bu önceki cevaplardan nasıl farklı?
Peter Mortensen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.