ฉันจะแสดงรายการคอลเลกชันทั้งหมดในเชลล์ MongoDB ได้อย่างไร


คำตอบ:


1157

คุณทำได้...

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

คุณสมบัติที่ดี คุณสามารถวนซ้ำของชื่อเพื่อทำอย่างอื่น (เช่นลบรายการทั้งหมดออกจากคอลเลกชัน)
Hilton Perantunes


6
เราขอได้โปรดdb.listCollections()ตามคำตอบที่แสดงไว้ที่นี่และเช็คเป็นสีเขียว? มิฉะนั้นคนทำผิดพลาดเหมือนที่ฉันได้นับครั้งไม่ถ้วนเมื่อพวกเขามาถึงคำตอบนี้ - และพยายามที่จะใช้และข้อผิดพลาดกลับมาdb.getCollectionNames db.collectionNames is not a function
niftylettuce

22
@niftylettuce คำถามนี้เกี่ยวกับเชลล์ MongoDB ไม่ใช่ไดรเวอร์ node.js db.getCollectionNames()ยังคงเป็นคำตอบที่ถูกต้องสำหรับเชลล์
JohnnyHK

424
> show collections

จะแสดงรายการคอลเลกชันทั้งหมดในฐานข้อมูลที่เลือกในปัจจุบันตามที่ระบุในวิธีใช้บรรทัดคำสั่ง ( help)


2
คุณไม่สามารถใช้เอาต์พุตคอลเลกชันโชว์ในสคริปต์ แต่หนึ่งสามารถทำ x = db.getCollectionNames () เพื่อรับอาร์เรย์ของชื่อทั้งหมด
ceteras

1
ตัวเลขสองหมายเลขที่แสดงรายการหลังจากการรวบรวมทุกครั้งหมายถึงอะไร ขนาดสองประเภทคืออะไร content 1145.586MB / 1506.855MBตัวอย่างเช่น.
Dan Dascalescu

@ ด่าน: ฉันไม่ได้ใช้ 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 เชิงสัมพันธ์
Jeff Puckett

9
ไม่, useคือการใช้ฐานข้อมูล, ไม่มีส่วนเกี่ยวข้องกับคอลเลกชัน
sjmeverett

1
เรายังสามารถใช้ db.collections
Biplab Malakar


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

หากคุณต้องการแสดงคอลเลกชันทั้งหมดจากเชลล์ 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);
});

ระหว่างคำสั่งทั้งสามกับตัวอย่างนี้คุณควรได้รับการคุ้มครองอย่างดี!


8

ฉันคิดว่าหนึ่งใน confusions ที่ใหญ่ที่สุดคือความแตกต่างระหว่างสิ่งที่คุณสามารถทำได้กับ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')
            )
        }
    )
"

หมายเหตุ: มันใช้งานได้ดีเหมือนซับในเดียว (แต่มันดูแย่มากใน Stack Overflow)

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 ชี้ให้เห็นนี้จะใช้กับคนขับโหนดและไม่เปลือก Mongoต่อคำถาม OP
เจฟฟ์ Puckett

@JeffPuckettII ฉันไม่ได้ใช้โหนด มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉันในเปลือก mongo ฉันสงสัยว่าทำไมมันจะไม่?
Aniruddh Joshi

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

รายการคอลเลกชันทั้งหมดจาก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

สำหรับการปรับใช้ MongoDB 3.0 โดยใช้เอ็นจิ้นการเก็บข้อมูล WiredTiger หากคุณเรียกใช้db.getCollectionNames()จากรุ่นของ mongo shell ก่อน 3.0 หรือรุ่นของไดรเวอร์ก่อนหน้า 3.0 รุ่นที่เข้ากันได้ db.getCollectionNames()จะไม่ส่งคืนข้อมูลแม้ว่าจะมีคอลเลกชันที่มีอยู่แล้วก็ตาม

สำหรับรายละเอียดเพิ่มเติมโปรดดูที่นี้


โพสต์เมตาที่เกี่ยวข้อง
Peter Mortensen

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

ตัวอย่าง: ค้นหาคอลเล็กชันทั้งหมดที่มี "อิมพอร์ต" ในชื่อ

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

ฉันจะได้รับรายชื่อของคอลเลกชันที่มีชื่อบางอย่างเช่นการกรอง
Parveen

@Praveen - ฉันได้อัปเดตคำตอบของฉันเพื่อให้รวมคำตอบกับกรณีของคุณ หวังว่าจะช่วย
Amitesh

ขอบคุณ Amitesh ฉันเขียนสคริปต์ของฉัน db.getCollectionNames (). forEach (ฟังก์ชั่น (collName) {if (collName.startsWith ("TestCollection_")) {พิมพ์ ("ดัชนีการเลื่อนสำหรับ" + collName); db.getCollection (collName). DropIndex (" ts_1 ");}});
Parveen

-1

ใช้คำสั่งต่อไปนี้จากmongoเปลือก:

show collections

หากคุณสั่งการ backticks ไม่ควรโหวต -1 ของคุณ
blamb

สิ่งนี้แตกต่างจากคำตอบก่อนหน้าอย่างไร
Peter Mortensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.