Làm cách nào tôi có thể liệt kê tất cả các bộ sưu tập trong trình bao MongoDB?


757

Trong trình bao MongoDB, làm cách nào để liệt kê tất cả các bộ sưu tập cho cơ sở dữ liệu hiện tại mà tôi đang sử dụng?

Câu trả lời:


1159

Bạn có thể làm...

JavaScript (vỏ):

db.getCollectionNames()

Node.js:

db.listCollections()

Không phải JavaScript (chỉ vỏ):

show collections

Lý do tôi gọi đó không phải là JavaScript là vì:

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

Nếu bạn thực sự muốn sản phẩm ngọt ngào, ngọt ngào đó show collections, bạn có thể:

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

Tính năng tốt đẹp. Bạn có thể lặp qua mảng tên để làm việc khác (ví dụ: xóa tất cả các mục khỏi bộ sưu tập).
Hilton Perantunes


6
Chúng tôi có thể xin vui lòng nhận được db.listCollections()như câu trả lời hiển thị ở đây và kiểm tra màu xanh lá cây? Nếu không, mọi người cũng mắc lỗi tương tự tôi đã làm vô số lần khi họ trả lời câu hỏi này - và cố gắng sử dụng db.getCollectionNamesvà lỗi lại quay trở lại db.collectionNames is not a function.
niftylettuce

22
@niftylettuce Câu hỏi này là về trình bao MongoDB, không phải trình điều khiển node.js. db.getCollectionNames()vẫn là câu trả lời đúng cho vỏ.
JohnnyHK

424
> show collections

sẽ liệt kê tất cả các bộ sưu tập trong DB hiện được chọn, như đã nêu trong dòng lệnh help ( help).


2
Bạn không thể sử dụng đầu ra của bộ sưu tập chương trình trong một tập lệnh, nhưng người ta có thể thực hiện x = db.getCollectionNames () để lấy một mảng gồm tất cả các tên.
ceteras

1
Hai con số được liệt kê sau mỗi bộ sưu tập có ý nghĩa gì? Hai loại kích cỡ? content 1145.586MB / 1506.855MBví dụ.
Dan Dascalescu

@Dan: Tôi đã không sử dụng MongoDB trong một thời gian, nhưng tôi đoán tốt nhất là kích thước của dữ liệu được lưu trữ trong bộ sưu tập so với tổng số tiền được phân bổ cho bộ sưu tập đó (để xử lý các cập nhật và tăng trưởng nhỏ mà không phải liên tục phân bổ lại không gian mới cho toàn bộ nội dung của bộ sưu tập).
Cameron

265

Làm cách nào để liệt kê tất cả các bộ sưu tập cho cơ sở dữ liệu hiện tại mà tôi đang sử dụng?

Ba phương pháp

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

Để liệt kê tất cả các cơ sở dữ liệu :

show dbs

Để nhập hoặc sử dụng cơ sở dữ liệu đã cho:

use databasename

Để liệt kê tất cả các bộ sưu tập :

show collections

Đầu ra:

collection1
collection2
system.indexes

(hoặc là)

show tables

Đầu ra:

collection1
collection2
system.indexes

(hoặc là)

db.getCollectionNames()

Đầu ra:

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

Để nhập hoặc sử dụng bộ sưu tập nhất định

use collectionname

1
+1 cho câu trả lời đầy đủ nhất. minh họa show tableslà khá hữu ích cho những người đến từ một nền tảng dbms quan hệ.
Jeff Puckett

9
Không, uselà sử dụng cơ sở dữ liệu, không có gì để làm với các bộ sưu tập
sjmeverett

1
chúng tôi cũng có thể sử dụng db.collections
Biplab Malakar


30

Ngoài các tùy chọn được đề xuất bởi người khác:

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

Ngoài ra còn có một cách khác có thể thực sự tiện dụng nếu bạn muốn biết cách mỗi bộ sưu tập được tạo ra (ví dụ: đó là một bộ sưu tập có giới hạn với kích thước cụ thể):

db.system.namespaces.find()

23

Trước tiên, bạn cần sử dụng cơ sở dữ liệu để hiển thị tất cả các bộ sưu tập / bảng bên trong nó.

>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

Bạn có thể sử dụng show tableshoặc show collections.


2
@LalitKumarB: Sao lại thế? Dựa trên các câu trả lời khác, đó là câu trả lời phù hợp cho điều này thực sự có thể hoạt động. Ít nhất đó là một nỗ lực để trả lời. Nó là gì, là một câu trả lời cho câu hỏi rất cũ đã có nhiều câu trả lời đúng được đăng.
Roope Hakulinen

14

Thử:

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

Lệnh được sử dụng để hiển thị tất cả các bộ sưu tập trong cơ sở dữ liệu MongoDB là

show collections

Trước khi chạy show collectionslệnh, bạn phải chọn cơ sở dữ liệu:

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

Để xem tất cả các cơ sở dữ liệu, bạn có thể sử dụng lệnh

show dbs // Shows all the database names present

Để biết thêm thông tin, hãy truy cập xem Bắt đầu .


11

Nếu bạn muốn hiển thị tất cả các bộ sưu tập từ shell MongoDB (dòng lệnh), hãy sử dụng trình trợ giúp shell,

show collections

cho thấy tất cả các bộ sưu tập cho cơ sở dữ liệu hiện tại. Nếu bạn muốn nhận tất cả các danh sách bộ sưu tập từ ứng dụng của mình thì bạn có thể sử dụng phương thức cơ sở dữ liệu MongoDB

db.getCollectionNames()

Để biết thêm thông tin về trình trợ giúp shell MongoDB, bạn có thể xem mongoShell Quick Reference .


11

Các lệnh sau trên mongoshell là phổ biến.

show databases
show collections

Cũng thế,

show dbs
use mydb
db.getCollectionNames()

Đôi khi thật hữu ích khi xem tất cả các bộ sưu tập cũng như các chỉ mục trên các bộ sưu tập là một phần của không gian tên tổng thể:

Đây là cách bạn sẽ làm điều đó:

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

Giữa ba lệnh và đoạn trích này, bạn sẽ được bảo vệ tốt!


8

Tôi nghĩ một trong những nhầm lẫn lớn nhất là sự khác biệt giữa những gì bạn có thể làm với mongo(hoặc vỏ tương tác / lai) so với mongo --eval(hoặc vỏ JavaScript thuần túy). Tôi giữ những tài liệu hữu ích này tiện dụng:

Dưới đây là một ví dụ về kịch bản những gì bạn có thể làm với showcác lệnh:

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

Lưu ý: Điều đó thực sự hoạt động tốt như một lớp lót. (Nhưng có vẻ khủng khiếp trên Stack Overflow.)

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

Điều này là vô cùng hữu ích, cảm ơn.
Marco Craveiro

4

Trên> = 2.x, bạn có thể làm

db.listCollections()

Trên 1.x bạn có thể làm

db.getCollectionNames()

1
như @JohnnyHK đã chỉ ra điều này chỉ áp dụng cho trình điều khiển nút chứ không phải trình vỏ mongo cho mỗi câu hỏi OP
Jeff Puckett

@JeffPuckettII Tôi không sử dụng Node. Điều này hoạt động hoàn hảo cho tôi bên trong vỏ mongo. Tôi tự hỏi tại sao nó sẽ không?
Aniruddh Joshi

1
Tôi đang chạy phiên bản shell MongoDB: 3.2.6 và khi tôi chạy db.getCollectionNames()tôi nhận được [ "users" ]vì tôi có bộ sưu tập người dùng. Nếu tôi thử db.listCollections()thì kết quả là[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett

3

Liệt kê tất cả các bộ sưu tập từ mongoshell:

  • db.getCollectionNames ()
  • bộ sưu tập chương trình
  • hiển thị bảng

Lưu ý: Các bộ sưu tập sẽ hiển thị từ cơ sở dữ liệu hiện tại bạn đang ở đâu trong hiện


Điều này khác với câu trả lời trước như thế nào?
Peter Mortensen

3

Để chuyển sang cơ sở dữ liệu.

Bởi:

sử dụng ví dụ {your_database_name} :

use friends

nơi friendslà tên của cơ sở dữ liệu của bạn.

Sau đó viết:

db.getCollectionNames()
show collections

Điều này sẽ cung cấp cho bạn tên của bộ sưu tập.


Điều này khác với câu trả lời trước như thế nào?
Peter Mortensen

2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • kết nối với cơ sở dữ liệu MongoDB bằng cách sử dụng mongo. Điều này sẽ bắt đầu kết nối.
  • sau đó chạy show dbslệnh. Điều này sẽ cho bạn thấy tất cả các cơ sở dữ liệu thoát / có sẵn.
  • sau đó chọn cái databasebạn muốn Ở trên là vậy anuradhfirst. Sau đó chạy use anuradhfirst. Điều này sẽ chuyển sang cơ sở dữ liệu bạn muốn.
  • sau đó chạy show collectionslệnh. Điều này sẽ hiển thị tất cả collectionsbên trong cơ sở dữ liệu đã chọn của bạn.

1

bộ sưu tập chương trình

Lệnh này thường hoạt động trên trình bao MongoDB sau khi bạn đã chuyển sang cơ sở dữ liệu.


1

Đối với việc triển khai MongoDB 3.0 bằng công cụ lưu trữ WiredTiger, nếu bạn chạy db.getCollectionNames()từ phiên bản vỏ mongo trước 3.0 hoặc phiên bản trình điều khiển trước phiên bản tương thích 3.0, db.getCollectionNames()sẽ không trả về dữ liệu, ngay cả khi có các bộ sưu tập hiện có.

Để biết thêm chi tiết, xin vui lòng tham khảo điều này .



0
show collections

hoặc là

show tables

hoặc là

db.getCollectionNames();

Điều này khác với câu trả lời trước như thế nào?
Peter Mortensen

không có gì ngoài việc cải thiện tài khoản của tôi
nixxo_raa

0

Tôi sử dụng listCollections(hỗ trợ MongoDB 3.0 trở lên) cho mục đích này.

Thí dụ:

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

Để lấy thêm thông tin như chỉ mục của bộ sưu tập:

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

Để chỉ in tên bộ sưu tập:

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

Tôi cảm thấy điều này cung cấp linh hoạt hơn.

Đọc thêm: 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" ]

Thông tin chi tiết cho mọi bộ sưu tập:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Đối với người dùng có quyền truy cập bắt buộc (đặc quyền cấp cho hành động listCollections trên cơ sở dữ liệu), phương thức liệt kê tên của tất cả các bộ sưu tập cho cơ sở dữ liệu.
  • Đối với người dùng không có quyền truy cập được yêu cầu, phương thức chỉ liệt kê các bộ sưu tập mà người dùng có đặc quyền. Ví dụ: nếu người dùng đã tìm thấy trên một bộ sưu tập cụ thể trong cơ sở dữ liệu, phương thức sẽ chỉ trả về bộ sưu tập đó.

Để liệt kê danh sách bộ sưu tập dựa trên chuỗi tìm kiếm.

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

Ví dụ: Tìm tất cả các bộ sưu tập có "nhập khẩu" trong tên

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

Tôi có thể lấy danh sách bộ sưu tập chứa một số tên như bộ lọc
Parveen

@Praveen - Tôi đã cập nhật câu trả lời của mình để bao gồm câu trả lời cho trường hợp của bạn. Hy vọng rằng sẽ giúp
Amitesh

Cảm ơn Amitesh. Tôi đã viết tập lệnh của mình db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("chỉ mục droping cho" + collName); db.getCollection (collName). ts_1 ");}});
Parveen

-1

Sử dụng lệnh sau từ mongoshell:

show collections

nếu bạn đặt lệnh của bạn trong backticks, hãy bỏ phiếu -1.
blamb

Điều này khác với câu trả lời trước như thế nào?
Peter Mortensen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.