Bagaimana cara menghapus database MongoDB dari baris perintah?

854

Apa cara termudah untuk melakukan ini dari bash prompt saya?

penggiling kopi
sumber
5
lihat pertanyaan ini: stackoverflow.com/questions/3366397/… . Sangat mudah untuk melakukannya dari kulit mongo.
Jesse Pollak

Jawaban:

1084

Seperti ini:

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

Info lebih lanjut tentang skrip shell dari baris perintah di sini: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting

Tim Gautier
sumber
Ini sangat membantu dalam kasus saya. Entah bagaimana saya memiliki database bernama "mean-dev" dari instalasi yang lebih lama, dan memasukkan "mean-dev.dropDatabase ()" di shell mongo menghasilkan "ReferenceError: mean tidak didefinisikan". Tetapi menggunakan solusi dalam jawaban ini berhasil. +1
KP MacGregor
22
Jika Anda ingin mendapatkan hasil yang dapat dibaca manusia, lakukan dengan cara ini: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko
1
KP MacGregor. Anda seharusnya: "use mean-dev" + "db.dropDatabase ()"
ozma
Terima kasih. Ini adalah bagaimana Anda dapat menyesuaikan host dan port: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens
844

Cara terbaik untuk melakukannya adalah dari konsol mongodb:

> use mydb; 
> db.dropDatabase();

Atau, Anda dapat menghentikan mongoddan menghapus file data dari direktori data Anda, kemudian restart.

Petunjuk: Anda juga dapat memindahkan file data ke subfolder, dan menghapusnya jika Anda yakin tidak lagi membutuhkannya.

mnemosyn
sumber
2
Saya pikir maksudnya langsung dari bisikan bukan? Dalam hal ini Anda harus membuat file .js dengan perintah-perintah itu dan memintanya dari prompt menggunakan "mongo dropdb.js" atau sesuatu atau melakukan seperti yang Anda katakan dan menghapus file secara manual.
Remon van Vliet
2
tetapi perlu diketahui bahwa Anda tidak dapat menggunakan useperintah dalam file .js, Anda harus terhubung ke DB konkret (tentukan dbname untuk perintah mongo)
Betlista
46
Kiat Pro: setelah menjatuhkan basis data, Anda mungkin ingin keluar dari mongo shell dan menghapus ~/.dbshellfile Anda untuk menghapus riwayat perintah Anda. (Mungkin ada cara yang lebih baik untuk melakukan itu - saya tidak yakin.) Saya melakukan ini karena, tidak seperti dengan SQL, perintah mongo untuk menjatuhkan database sebenarnya tidak merujuk nama database yang akan dihapus - itu hanya menjatuhkan basis data dimana klien saat ini terhubung. Menghapus riwayat perintah Anda akan mencegah Anda secara tidak sengaja memutar ulang dropDatabaseperintah dan secara tidak sengaja menjatuhkan database kedua.
Chris Allen Lane
3
Itu ide yang cerdas, @chrisallenlane. Shell mongodb adalah alat yang cukup berbahaya di kali ... :)
mnemosyn
Peringatan: Jika Anda menjatuhkan database dan membuat database baru dengan nama yang sama, Anda harus me-restart semua instance mongo, atau menggunakan perintah flushRouterConfig pada semua instance mongo sebelum membaca atau menulis ke database itu. Tindakan ini memastikan bahwa instance mongos menyegarkan cache metadata mereka, termasuk lokasi shard utama untuk database baru. Jika tidak, mongo mungkin kehilangan data saat dibaca dan dapat menulis data ke pecahan yang salah.
Lekr0
115

Saya menemukan ini mudah diingat:

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 }
Alex Baban
sumber
113

Anda tidak perlu heredocs atau eval , mongoitu sendiri dapat bertindak sebagai penerjemah.

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

Buat file tersebut dapat dieksekusi dan jalankan.

mikemaccana
sumber
3
Perhatikan bahwa nama skrip harus diakhiri dengan .js, jika tidak maka akan ditafsirkan sebagai alamat db.
Vegard
1
@ Vegard Itu tidak benar. Anda menjalankan mongo filenameyang tidak perlu - file sudah memiliki juru bahasa di baris paling atas. ./filename
Jadikan
@mikemaccana Saya tahu itu, tetapi melakukan ./filenameakan benar-benar berjalan /usr/bin/env mongo filename, bukan? Dan jika filenametidak berakhir .py, mongo tidak akan mengenali argumen sebagai skrip untuk dijalankan.
Vegard
"Melakukan ./filename akan menjalankan nama file / usr / bin / env mongo, kan?" Tidak. Periksa output dari ps.
mikemaccana
@mikemaccana Output pshanya menunjukkan kepada Anda apa yang berjalan pada saat Anda memohon ps, bukan rantai execpanggilan yang mengarah ke titik itu atau pekerjaan yang telah dilakukan kernel untuk memuat dan mengeksekusi file. Jika Anda ingin tahu apa yang sebenarnya terjadi, Anda harus menggunakan write a wrapper around /usr/bin/env, atur itu sebagai executable di baris shebang, dan kemudian mulai semuanya strace.
kbolino
31

Mulai MongoDB

Perintah untuk penurunan Database adalah:

1. pertama-tama pilih database yang ingin Anda hapus

use < database name >

2. Kemudian gunakan ini ..

db.dropDatabase()
bud-e
sumber
28

Anda juga bisa menggunakan "heredoc":

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

Hasil dalam output seperti:

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

Saya suka menggunakan heredocs untuk hal-hal seperti ini, jika Anda ingin urutan perintah yang lebih kompleks.

David
sumber
19

Berikut adalah beberapa penggunaan operasi hapus penuh untuk mongodb menggunakan mongo shell

Untuk menghapus dokumen tertentu dalam koleksi:db.mycollection.remove( {name:"stack"} )

Untuk menghapus semua dokumen dalam koleksi: db.mycollection.remove()

Untuk menghapus koleksi : db.mycollection.drop()

untuk menghapus database : pertama pergi ke database itu dengan use mydbperintah dan kemudian

db.dropDatabase()

langsung dari command prompt atau blash: mongo mydb --eval "db.dropDatabase()

bhv
sumber
18

Cara lain:

echo "db.dropDatabase()" | mongo <database name>
Gabriel Mancini
sumber
15

Jalankan di terminal:

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.
Anderson Lopes
sumber
1
Jawaban yang sama dengan yang ini , yang diberikan sebulan sebelumnya.
Dan Dascalescu
10

Buka jendela terminal lain dan jalankan perintah berikut,

mongodb
use mydb
db.dropDatabase()

Output dari operasi itu akan terlihat seperti berikut

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

Harap dicatat bahwa mydbmasih digunakan, maka memasukkan input apa pun pada saat itu akan menginisialisasi kembali basis data.

helcode
sumber
4

Menggunakan Javascript, Anda dapat dengan mudah membuat skrip drop_bad.js untuk menjatuhkan basis data Anda:

buat drop_bad.js :

use bad;
db.dropDatabase();

Kemudian jalankan 1 perintah di terminal untuk menjalankan skrip menggunakan mongo shell:

mongo < drop_bad.js
sergiuz
sumber
2

Walaupun ada beberapa metode, Cara terbaik (paling efisien dan termudah) adalah menggunakan db.dropDatabase()

Lakmal Vithanage
sumber
2

Di prompt perintah Anda, Pertama hubungkan ke mongodb menggunakan perintah berikut:

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

Anda akan mengakses db dengan <dbname>.

Jalankan perintah berikut untuk menjatuhkan seluruh database:

db.dropDatabase()
TechGuy
sumber
-h adalah bantuan, -d bukan pilihan lebih seperti `mongo --host [nama-host]: [port: number] -u [nama pengguna] -p [kata sandi] [dbname] --eval" db.dropDatabase ( ) "`
jasenmichael
2

one liner remote menghapus semua koleksi dari database mongo

note harus menggunakan --host, (-h adalah bantuan untuk perintah mongo), dan -d bukan opsi, pilih db dan perintah setelah kata sandi.

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

Masuk ke baris perintah mongoDB Anda: Dan ketikkan perintah di bawah ini. gunakan "YOUR_DATABASE_NAME"; db.dropDatabase ();

Shrinivas Kalangutkar
sumber
0

Jatuhkan database MongoDB menggunakan python:

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")
Joe Drumgoole
sumber
-1

db akan menampilkan tipe nama Database saat ini: db.dropDatabase ();

1- pilih basis data untuk dibuang dengan menggunakan kata kunci ' gunakan '.

2 - lalu ketik db.dropDatabase ();

nixxo_raa
sumber
-2

gunakan perintah berikut dari mongo shell untuk menjatuhkan db

gunakan; db.dropDatabase ();

Anoop Sharma
sumber
bagaimana perintah ini menentukan basis data yang akan dibuang? Dengan database yang disebut "auth-users", saya mencoba > use auth-users ; db.dropDatabase()dan > use auth-users; db.dropDatabase()dan keduanya kembali[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
Tn. Kennedy