ฉันจะลบฐานข้อมูล MongoDB จากบรรทัดคำสั่งได้อย่างไร


คำตอบ:


1084

แบบนี้:

mongo <dbname> --eval "db.dropDatabase()"

ข้อมูลเพิ่มเติมเกี่ยวกับการเขียนสคริปต์เชลล์จากบรรทัดคำสั่งที่นี่: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting


สิ่งนี้มีประโยชน์มากในกรณีของฉัน ยังไงก็เถอะฉันมีฐานข้อมูลชื่อ "mean-dev" จากการติดตั้งที่เก่ากว่าและป้อน "mean-dev.dropDatabase ()" ในเชลล์ mongo ส่งผลให้ "ReferenceError: หมายถึงไม่ได้กำหนด" แต่การใช้โซลูชันในคำตอบนี้ได้หลอกลวง +1
KP MacGregor

22
หากคุณต้องการได้ผลลัพธ์ที่มนุษย์อ่านได้ให้ทำเช่นนี้: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko

1
KP MacGregor คุณควรจะได้รับ: "use mean-dev" + "db.dropDatabase ()"
ozma

ขอบคุณ นี่คือวิธีที่คุณสามารถปรับแต่งโฮสต์และพอร์ต: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens

844

วิธีที่ดีที่สุดที่จะทำคือจากคอนโซล MongoDB:

> use mydb; 
> db.dropDatabase();

อีกวิธีหนึ่งคุณสามารถหยุดmongodและลบไฟล์ข้อมูลจากไดเรกทอรีข้อมูลของคุณแล้วรีสตาร์ท

คำแนะนำ: คุณสามารถย้ายไฟล์ข้อมูลไปยังโฟลเดอร์ย่อยและลบออกหากคุณแน่ใจว่าคุณไม่ต้องการมันอีกต่อไป


2
ฉันคิดว่าเขาหมายถึงโดยตรงจากพรอมต์ใช่มั้ย ในกรณีนี้คุณต้องสร้างไฟล์. js ด้วยคำสั่งเหล่านั้นและเรียกใช้จากพรอมต์โดยใช้ "mongo dropdb.js" หรืออะไร ๆ หรือทำตามที่คุณพูดและลบไฟล์ด้วยตนเอง
Remon van Vliet

2
แต่ระวังว่าคุณไม่สามารถใช้useคำสั่งในไฟล์. js ได้คุณต้องเชื่อมต่อกับฐานข้อมูล DB (ระบุ dbname สำหรับคำสั่ง mongo)
Betlista

46
คำแนะนำสำหรับผู้เชี่ยวชาญ: หลังจากวางฐานข้อมูลคุณอาจต้องการออกจากเชลล์ mongo และลบ~/.dbshellไฟล์ของคุณเพื่อล้างประวัติคำสั่งของคุณ (อาจมีวิธีที่ดีกว่าในการทำเช่นนั้น - ฉันไม่แน่ใจ) ฉันทำเช่นนี้เพราะไม่เหมือนกับ SQL คำสั่ง mongo เพื่อวางฐานข้อมูลไม่ได้อ้างอิงชื่อของฐานข้อมูลจริง ๆ - เพียงแค่หยด ฐานข้อมูลที่ไคลเอ็นต์เชื่อมต่ออยู่ในปัจจุบัน การล้างประวัติคำสั่งของคุณจะป้องกันไม่ให้คุณเล่นซ้ำdropDatabaseคำสั่งโดยไม่ตั้งใจและปล่อยฐานข้อมูลที่สองโดยไม่ตั้งใจ
Chris Allen Lane

3
นั่นเป็นความคิดที่ฉลาด @chrisallenlane เปลือกหอยเป็นเครื่องมือที่ค่อนข้างอันตรายในบางครั้ง ... :)
mnemosyn

คำเตือน:ถ้าคุณวางฐานข้อมูลและสร้างฐานข้อมูลใหม่ด้วยชื่อเดียวกันคุณต้องรีสตาร์ทอินสแตนซ์ mongos ทั้งหมดหรือใช้คำสั่ง flushRouterConfig บนอินสแตนซ์ mongos ทั้งหมดก่อนที่จะอ่านหรือเขียนลงในฐานข้อมูลนั้น การดำเนินการนี้ทำให้แน่ใจได้ว่าอินสแตนซ์ mongos รีเฟรชแคชข้อมูลเมตาของพวกเขารวมถึงที่ตั้งของส่วนหลักสำหรับฐานข้อมูลใหม่ มิฉะนั้น mongos อาจพลาดข้อมูลในการอ่านและอาจเขียนข้อมูลไปยังส่วนที่ผิด
Lekr0

114

ฉันพบสิ่งนี้ง่ายต่อการจดจำ:

mongo //to start the mongodb shell

show dbs //to list existing databases

use <dbname> //the <dbname> is the database you'd like to drop

db //should show <dbname> just to be sure I'm working with the right database

db.dropDatabase() //will delete the database & return { "dropped" : "<dbname>", "ok" : 1 }

113

คุณไม่จำเป็นต้อง heredocs หรือ EVAL , mongoตัวเองสามารถทำหน้าที่เป็นล่าม

#!/usr/bin/env mongo
var db = new Mongo().getDB("someDatabase");
db.dropDatabase();

ทำให้ไฟล์เรียกทำงานและรัน


3
โปรดทราบว่าชื่อสคริปต์จะต้องลงท้ายด้วย.jsมิฉะนั้นจะถูกตีความว่าเป็นที่อยู่ db
Vegard

1
@Vegard นั่นไม่ถูกต้อง คุณกำลังเรียกใช้mongo filenameซึ่งไม่จำเป็น - ไฟล์มีล่ามอยู่ในบรรทัดด้านบน เพียงแค่ทำให้ไฟล์ปฏิบัติการและเรียกใช้มัน./filename
mikemaccana

@ Mikemaccana ฉันรู้ว่า แต่การทำ./filenameจะทำงานจริง/usr/bin/env mongo filenameใช่ไหม ดังนั้นหากfilenameไม่ได้จบลง.pyMongo จะไม่รับรู้ว่าอาร์กิวเมนต์เป็นสคริปต์ที่จะเรียกใช้
Vegard

"การทำ. / ไฟล์ชื่อจริงจะเรียกใช้ไฟล์ / usr / bin / env mongo ใช่มั้ย" psเลขที่ตรวจสอบการส่งออกของ
mikemaccana

@mikemaccana ผลลัพธ์ของการpsแสดงเฉพาะสิ่งที่ทำงานในเวลาที่คุณเรียกpsไม่ใช่สายโซ่ของการexecโทรที่นำไปสู่จุดนั้นหรืองานเคอร์เนลได้ทำเพื่อโหลดและรันไฟล์ ถ้าคุณต้องการที่จะรู้ว่าสิ่งที่เกิดขึ้นจริงที่คุณควรใช้เขียนกระดาษห่อรอบ/usr/bin/envชุดว่าปฏิบัติการในสาย shebang straceแล้วเตะสิ่งที่ทั้งออกด้วย
kbolino

31

เริ่ม MongoDB

คำสั่งสำหรับฐานข้อมูลหล่นคือ:

1.ก่อนอื่นเลือกฐานข้อมูลที่คุณต้องการลบ

use < database name >

2.จากนั้นใช้สิ่งนี้ ..

db.dropDatabase()

28

คุณสามารถใช้ "heredoc":

mongo localhost/db <<EOF
db.dropDatabase()
EOF

ผลลัพธ์ในผลลัพธ์เช่น:

mongo localhost/db <<EOF
db.dropDatabase()
EOF
MongoDB shell version: 2.2.2
connecting to: localhost/db
{ "dropped" : "db", "ok" : 1 }    
bye

ฉันชอบใช้ heredocs เพื่อสิ่งนี้ในกรณีที่คุณต้องการลำดับของคำสั่งที่ซับซ้อนมากขึ้น



18

ต่อไปนี้คือการใช้การลบแบบเต็มสำหรับ MongoDB โดยใช้ Mongo Shell

ในการลบเอกสารเฉพาะในคอลเล็กชัน:db.mycollection.remove( {name:"stack"} )

ในการลบเอกสารทั้งหมดในคอลเล็กชัน: db.mycollection.remove()

หากต้องการลบคอลเล็กชัน : db.mycollection.drop()

เพื่อลบฐานข้อมูล : ก่อนอื่นให้ไปที่ฐานข้อมูลตามuse mydbคำสั่งแล้ว

db.dropDatabase()

โดยตรงจาก command prompt หรือ blash: mongo mydb --eval "db.dropDatabase()


15

ดำเนินการในเทอร์มินัล:

mongo // To go to shell

show databases // To show all existing databases.

use <DATA_BASE> // To switch to the wanted database.

db.dropDatabase() // To remove the current database.

1
เช่นเดียวกับคำตอบนี้ซึ่งได้รับหนึ่งเดือนก่อนหน้านี้
Dan Dascalescu

10

เปิดหน้าต่างเทอร์มินัลอื่นและดำเนินการคำสั่งต่อไปนี้

mongodb
use mydb
db.dropDatabase()

ผลลัพธ์ของการดำเนินการนั้นจะมีลักษณะดังต่อไปนี้

MAC:FOLDER USER$ mongodb
> show databases
local      0.78125GB
mydb       0.23012GB
test       0.23012GB
> use mydb
switched to db mydb
>db.dropDatabase()
{ "dropped" : "mydb", "ok" : 1 }
>

โปรดทราบว่าmydbยังคงมีการใช้งานอยู่ดังนั้นการใส่ข้อมูลใด ๆ ในเวลานั้นจะเริ่มต้นฐานข้อมูลอีกครั้ง


4

ด้วยการใช้ Javascript คุณสามารถสร้างสคริปต์drop_bad.jsเพื่อวางฐานข้อมูลของคุณ:

สร้างdrop_bad.js :

use bad;
db.dropDatabase();

กว่ารันคำสั่ง 1 ในเทอร์มินัลเพื่อออกจากสคริปต์โดยใช้ mongo shell:

mongo < drop_bad.js

2

แม้ว่าจะมีหลายวิธีวิธีที่ดีที่สุด (มีประสิทธิภาพมากที่สุดและง่ายที่สุด) คือการใช้ db.dropDatabase()


2

ในพรอมต์คำสั่งของคุณก่อนอื่นให้เชื่อมต่อ mongodb โดยใช้คำสั่งต่อไปนี้:

mongo -h [host-name]:[port:number] -d [dbname] -u [username] -p [password]

<dbname>คุณจะได้รับการเข้าถึงฐานข้อมูลด้วย

รันคำสั่งต่อไปนี้เพื่อดร็อปฐานข้อมูลทั้งหมด:

db.dropDatabase()

-h คือความช่วยเหลือ -d ไม่ใช่ตัวเลือกเพิ่มเติมเช่น `mongo - โฮสต์ [ชื่อโฮสต์]: [พอร์ต: หมายเลข] -u [ชื่อผู้ใช้] -p [รหัสผ่าน] [dbname] - อันดับแรก" db.dropDatabase ( ) "`
jasenmichael

2

หนึ่งซับระยะไกลลบคอลเลกชันทั้งหมดจากฐานข้อมูล Mongo

note ต้องใช้ - โฮสต์, (-h คือวิธีใช้สำหรับคำสั่ง mongo) และ -d ไม่ใช่ตัวเลือกให้เลือก db และคำสั่งหลังจากรหัสผ่าน

mongo --host <mongo_host>:<mongo_port> -u <db_user> -p <db_pass> <your_db> --eval "db.dropDatabase()"

0

เข้าสู่ระบบในบรรทัดคำสั่ง mongoDB ของคุณ: และพิมพ์คำสั่งด้านล่าง ใช้ "YOUR_DATABASE_NAME"; db.dropDatabase ();


0

ดร็อปฐานข้อมูล MongoDB โดยใช้ไพ ธ อน:

import argparse

import pymongo


if __name__ == "__main__":
    """
    Drop a Database.
    """

    parser = argparse.ArgumentParser()
    parser.add_argument("--host", default='mongodb://localhost:27017',
                        help="mongodb URI [default: %(default)s]")
    parser.add_argument("--database", default=None,
                        help="database name: %(default)s]")

    args = parser.parse_args()

    client = pymongo.MongoClient(host=args.host)

    if args.database in client.list_database_names():
        client.drop_database(args.database)
        print(f"Dropped: '{args.database}'")
    else:
        print(f"Database '{args.database}' does not exist")

-1

dbจะแสดงประเภทชื่อฐานข้อมูลปัจจุบัน: db.dropDatabase ();

1- เลือกฐานข้อมูลที่จะวางโดยใช้คำหลัก ' ใช้ '

2- จากนั้นพิมพ์db.dropDatabase ();


-2

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

ใช้; db.dropDatabase ();


คำสั่งนี้จะระบุฐานข้อมูลที่จะวางอย่างไร ด้วยฐานข้อมูลที่เรียกว่า "ผู้ใช้ auth" ฉันลอง> use auth-users ; db.dropDatabase()แล้ว> use auth-users; db.dropDatabase()และทั้งสองกลับมา[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
Mr. Kennedy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.