Bir MongoDB veritabanını komut satırından nasıl bırakabilirim?


Yanıtlar:


1084

Bunun gibi:

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

Kabuğu komut satırından komut dosyası yazma hakkında daha fazla bilgi için: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting


Bu benim durumumda çok yardımcı oldu. Her nasılsa eski bir kurulumdan "mean-dev" adlı bir veritabanı vardı ve mongo kabuğuna "mean-dev.dropDatabase ()" girerek "ReferenceError: mean un definition" ile sonuçlandı. Ancak bu cevapta çözümü kullanmak hile yaptı. +1
KP MacGregor

22
Eğer insan tarafından okunabilir bir sonuç elde etmek istiyorsanız, bunu şu şekilde yapın: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko

1
KP MacGregor. şu şekilde olmalısınız: "mean-dev kullan" + "db.dropDatabase ()"
ozma

Teşekkürler. Ana bilgisayarı ve bağlantı noktasını şu şekilde özelleştirebilirsiniz: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens

844

Bunu yapmanın en iyi yolu mongodb konsolundan:

> use mydb; 
> db.dropDatabase();

Alternatif olarak, mongodveri dizininizdeki veri dosyalarını durdurabilir ve silebilir, sonra yeniden başlatabilirsiniz.

İpucu: Ayrıca veri dosyalarını bir alt klasöre taşıyabilir ve artık ihtiyacınız olmadığından eminseniz silebilirsiniz.


2
Bence doğrudan istemden demek istiyor değil mi? Bu durumda, ya bu komutlarla bir .js dosyası oluşturmanız ve "mongo dropdb.js" ya da bir şey kullanarak komut isteminden çağırmanız veya dosyaları el ile silmeniz ve kaldırmanız gerekir.
Remon van Vliet

2
ancak use.js dosyasında komut kullanamayacağınızı unutmayın, beton DB'ye bağlanmanız gerekir (mongo komutu için dbname belirtin)
Betlista 29:12

46
Profesyonel İpucu: Bir veritabanını bıraktıktan sonra, mongo kabuğundan çıkmak ve ~/.dbshellkomut geçmişinizi temizlemek için dosyanızı silmek isteyebilirsiniz . (Bunu yapmanın daha iyi bir yolu olabilir - emin değilim.) Bunu yapıyorum çünkü SQL'den farklı olarak, bir veritabanını düşürmek için mongo komutu aslında veritabanının adını bırakmak için başvurmuyor - sadece istemcinin bağlı olduğu veritabanı. Komut geçmişinizi temizlemek, yanlışlıkla dropDatabasekomutu tekrar oynatmanızı ve istemeden ikinci bir veritabanını düşürmenizi önler .
Chris Allen Lane

3
Bu akıllıca bir fikir, @chrisallenlane. Mongodb kabuğu bazen oldukça tehlikeli bir araçtır ... :)
mnemosyn

Uyarı: Bir veritabanını bırakırsanız ve aynı ada sahip yeni bir veritabanı oluşturursanız, söz konusu veritabanını okumadan veya bu veritabanına yazmadan önce tüm mongos örneklerini yeniden başlatmalı veya tüm mongos örneklerinde flushRouterConfig komutunu kullanmalısınız. Bu eylem, mongos örneklerinin, yeni veritabanı için birincil kırığın konumu da dahil olmak üzere meta veri önbelleklerini yenilemesini sağlar. Aksi takdirde, moğollar okumalardaki verileri kaçırabilir ve yanlış bir kırığa veri yazabilir.
Lekr0

114

Bunu hatırlaması kolay buldum:

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

Yorumlu metinlere veya değerlendirmeye gerek yoktur , mongokendisi bir tercüman olarak hareket edebilir.

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

Dosyayı yürütülebilir yapın ve çalıştırın.


3
Komut dosyası adının bitmesi gerektiğini .js, aksi takdirde db adresi olarak yorumlanacağını unutmayın.
Vegard

1
@Vegard Bu doğru değil. mongo filenameGereksiz çalıştırıyorsunuz - dosyanın üst satırında zaten bir tercüman var. Sadece dosyayı yürütülebilir yapın ve çalıştırın./filename
mikemaccana

@mikemaccana Bunu biliyorum, ama ./filenameaslında çalışacak /usr/bin/env mongo filenamedeğil mi? Ve eğer bu yüzden filenamede bitmiyor .py, Mongo çalıştırmak için komut dosyası olarak argüman tanımaz.
Vegard

"./Filename yapmak aslında / usr / bin / env mongo dosya adını çalıştırır, değil mi?" Hayır ps. Çıkışını kontrol edin .
mikemaccana

@mikemaccana Çıktısı pssize yalnızca çağırdığınız sırada neyin çalıştığını gösterir ps, execo noktaya götüren çağrılar zincirini ya da çekirdeğin dosyayı yüklemek ve yürütmek için yaptığı işi değil. Gerçekten neler olup bittiğini bilmek istiyorsanız, etrafına bir sarıcı yazmalı, bunu /usr/bin/envshebang satırındaki yürütülebilir dosya olarak ayarlamalı ve sonra her şeyi başlamalısınız strace.
kbolino

31

MongoDB'yi başlat

Veritabanı bırakma komutu:

1. önce silmek istediğiniz veritabanını seçin

use < database name >

2. Sonra bunu kullanın ..

db.dropDatabase()

28

Ayrıca bir "heredoc" da kullanabilirsiniz:

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

Çıktı sonuçları şöyle:

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

Daha karmaşık komut dizisi istemeniz durumunda, buedocs'u böyle şeyler için kullanmayı seviyorum.



18

İşte bazı mongo kabuğu kullanarak mongodb için tam silme işlemleri kullanın

Koleksiyonlardaki belirli bir belgeyi silmek için :db.mycollection.remove( {name:"stack"} )

Koleksiyonlardaki tüm belgeleri silmek için : db.mycollection.remove()

Koleksiyonu silmek için : db.mycollection.drop()

için silme veritabanı : İlk o veritabanı gidip use mydbsonra komuta ve

db.dropDatabase()

doğrudan komut isteminden veya kesintiden: mongo mydb --eval "db.dropDatabase()


15

Bir terminalde yürütün:

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
Aynı cevabı bu bir bir ay önce verildi.
Dan Dascalescu

10

Başka bir terminal penceresi açın ve aşağıdaki komutları yürütün,

mongodb
use mydb
db.dropDatabase()

Bu operasyonun çıktısı aşağıdaki gibi olacaktır

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

mydbHâlâ kullanımda olduğunu ve dolayısıyla herhangi bir girdinin eklenmesinin veritabanını yeniden başlatacağını lütfen unutmayın .


4

Javascript kullanarak , veritabanınızı bırakmak için kolayca bir drop_bad.js komut dosyası oluşturabilirsiniz :

oluşturmak drop_bad.js :

use bad;
db.dropDatabase();

Daha sonra, mongo kabuğunu kullanarak komut dosyasını incelemek için terminalde 1 komutunu çalıştırın:

mongo < drop_bad.js

2

Her ne kadar çeşitli yöntemler olsa da, en iyi yol (en verimli ve en kolay) kullanmaktır db.dropDatabase()


2

Komut isteminde, önce aşağıdaki komutu kullanarak mongodb'a bağlanın:

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

ile db'ye erişiyor olacaksınız <dbname>.

Tüm veritabanını bırakmak için aşağıdaki komutu çalıştırın:

db.dropDatabase()

-h yardım, -d daha çok `mongo --host [host-name] gibi bir seçenek değildir: [port: number] -u [kullanıcı adı] -p [şifre] [dbname] --eval" db.dropDatabase ( ) "`
jasenmichael

2

bir liner uzaktan tüm koleksiyonları mongo veritabanından kaldırmak

not --host kullanmalı, (-h mongo komutu için yardım) ve -d bir seçenek değil, db'yi ve paroladan sonra komutu seç.

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

0

MongoDB komut satırınıza giriş yapın: Ve aşağıdaki komutları yazın. "YOUR_DATABASE_NAME" kullanın; db.dropDatabase ();


0

Python kullanarak bir MongoDB veritabanı bırakın:

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 geçerli Veritabanı adı türünü gösterir: db.dropDatabase ();

1- ' use ' anahtar sözcüğünü kullanarak bırakılacak veritabanını seçin .

2- sonra db.dropDatabase ();


-2

db'yi bırakmak için mongo kabuğundan aşağıdaki komutu kullanın

kullanım; db.dropDatabase ();


bu komut hangi veritabanının bırakılacağını nasıl belirler? "Yetk kullanıcılar" olarak adlandırılan bir veritabanı ile denedim > use auth-users ; db.dropDatabase()ve > use auth-users; db.dropDatabase()hem iade[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
Kennedy'mle
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.