Como eu solto um banco de dados MongoDB na linha de comando?

854

Qual é a maneira mais fácil de fazer isso no meu prompt do bash?

moedor de café
fonte
5
consulte esta pergunta: stackoverflow.com/questions/3366397/… . É realmente fácil fazê-lo a partir do shell mongo.
Jesse Pollak

Respostas:

1084

Como isso:

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

Mais informações sobre como fazer o script do shell na linha de comando aqui: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#scripting

Tim Gautier
fonte
Isso foi muito útil no meu caso. De alguma forma, eu tinha um banco de dados chamado "mean-dev" em uma instalação mais antiga, e digitar "mean-dev.dropDatabase ()" no shell mongo resultou em "ReferenceError: mean não está definido". Mas usar a solução nesta resposta fez o truque. +1
KP MacGregor
22
Se você quiser obter um resultado legível, fazê-lo desta maneira: mongo <dbname> --eval "printjson(db.dropDatabase())"
Dmytro Uhnichenko
1
KP MacGregor. você deveria ter sido: "use mean-dev" + "db.dropDatabase ()"
ozma
Obrigado. É assim que você pode personalizar o host e a porta: mongo <yourDb> --host <yourHost> --port <yourPort> --eval 'db.dropDatabase()'
Clemens
844

A melhor maneira de fazer isso é no console do mongodb:

> use mydb; 
> db.dropDatabase();

Como alternativa, você pode parar mongod e excluir os arquivos de dados do seu diretório de dados e reiniciar.

Dica: você também pode mover os arquivos de dados para uma subpasta e excluí-los se tiver certeza de que não precisa mais deles.

mnemosyn
fonte
2
Eu acho que ele quer dizer diretamente do prompt, não é? Nesse caso, você precisa gerar um arquivo .js com esses comandos e invocá-lo no prompt usando "mongo dropdb.js" ou algo assim, ou fazer o que você diz e remover os arquivos manualmente.
Remon van Vliet
2
mas esteja ciente que você não pode usar usecomandos no arquivo .js, você tem que se conectar ao concreto DB (especificar dbname para o comando mongo)
Betlista
46
Dica profissional: depois de soltar um banco de dados, você pode sair do mongo shell e excluir seu ~/.dbshellarquivo para limpar seu histórico de comandos. (Pode haver uma maneira melhor de fazer isso - não tenho certeza.) Faço isso porque, diferentemente do SQL, o comando mongo para descartar um banco de dados na verdade não faz referência ao nome do banco de dados para descartar - ele simplesmente elimina o banco de dados ao qual o cliente está conectado no momento. Limpar o histórico de comandos impedirá que você repita acidentalmente o dropDatabasecomando e descarte acidentalmente um segundo banco de dados.
Chris Allen Lane,
3
Essa é uma ideia inteligente, @chrisallenlane. O shell MongoDB é uma ferramenta bastante perigoso às vezes ... :)
mnemosyn
Aviso: Se você eliminar um banco de dados e criar um novo banco de dados com o mesmo nome, reinicie todas as instâncias do mongos ou use o comando flushRouterConfig em todas as instâncias do mongos antes de ler ou gravar nesse banco de dados. Esta ação assegura que as instâncias do mongos atualizem seu cache de metadados, incluindo o local do shard primário para o novo banco de dados. Caso contrário, os mongos podem perder dados nas leituras e gravar dados em um fragmento errado.
Lekr0
115

Achei isso fácil de lembrar:

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
fonte
113

Você não precisa de heredocs ou eval ; mongoele pode atuar como intérprete.

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

Torne o arquivo executável e execute-o.

mikemaccana
fonte
3
Observe que o nome do script deve terminar com .js, caso contrário, será interpretado como o endereço db.
Vegard
1
@ Legard Isso não está correto. Você está executando o mongo filenameque é desnecessário - o arquivo já possui um intérprete na linha superior. Basta fazer o arquivo executável e executá-lo./filename
mikemaccana
@mikemaccana Eu sei disso, mas fazer ./filenamerealmente funcionará /usr/bin/env mongo filename, certo? E, se filenamenão terminar .py, o mongo não reconhecerá o argumento como um script a ser executado.
Vegard
"Realizar ./filename realmente executa o nome do arquivo / usr / bin / env mongo, certo?" Não. Verifique a saída de ps.
mikemaccana
@mikemaccana A saída de psapenas mostra o que está sendo executado no momento em que você invoca ps, não a cadeia de execchamadas que leva a esse ponto nem o trabalho que o kernel realizou para carregar e executar o arquivo. Se você quiser saber o que realmente está acontecendo, use um wrapper /usr/bin/env, defina-o como executável na linha shebang e, em seguida, inicie tudo strace.
kbolino
31

Iniciar o MongoDB

O comando para queda do banco de dados é:

1. primeiro selecione o banco de dados que deseja excluir

use < database name >

2. Então use isso ..

db.dropDatabase()
bud-e
fonte
28

Você também pode usar um "heredoc":

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

Resultados em saída como:

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

Eu gosto de usar heredocs para coisas assim, caso você queira uma sequência de comandos mais complexa.

David
fonte
19

Aqui estão algumas operações de exclusão completa do mongodb usando o mongo shell

Para excluir um documento específico nas coleções:db.mycollection.remove( {name:"stack"} )

Para excluir todos os documentos nas coleções: db.mycollection.remove()

Para excluir a coleção : db.mycollection.drop()

para excluir o banco de dados : primeiro vá para esse banco de dados por use mydbcomando e, em seguida,

db.dropDatabase()

diretamente do prompt de comando ou do flash: mongo mydb --eval "db.dropDatabase()

bhv
fonte
18

Outro jeito:

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

Execute em um 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
fonte
1
A mesma resposta que esta , que foi dada um mês antes.
Dan Dascalescu 9/09/16
10

Abra outra janela do terminal e execute os seguintes comandos,

mongodb
use mydb
db.dropDatabase()

A saída dessa operação deve ser semelhante à seguinte

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

Observe que mydbainda está em uso, portanto, a inserção de qualquer entrada nesse momento inicializará o banco de dados novamente.

helcode
fonte
4

Usando Javascript, você pode criar facilmente um drop_bad.js script para descartar seu banco de dados:

crie drop_bad.js :

use bad;
db.dropDatabase();

Em seguida, execute 1 comando no terminal para executar o script usando o mongo shell:

mongo < drop_bad.js
sergiuz
fonte
2

Embora existam vários métodos, a melhor maneira (mais eficiente e mais fácil) é usar db.dropDatabase()

Lakmal Vithanage
fonte
2

No prompt de comando, primeiro conecte-se ao mongodb usando o seguinte comando:

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

você estará acessando o db com <dbname>.

Execute o seguinte comando para descartar o banco de dados inteiro:

db.dropDatabase()
TechGuy
fonte
-h é ajuda, -d não é uma opção mais parecida com `mongo --host [nome do host]: [porta: número] -u [nome do usuário] -p [senha] [nome do db] --eval" db.dropDatabase ( ) "`
jasenmichael 14/07/19
2

um forro remoto remova todas as coleções do banco de dados mongo

note deve usar --host, (-h é ajuda para o comando mongo) e -d não é uma opção, selecione o db e o comando após a senha.

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

Entre na sua linha de comando do mongoDB: E digite os comandos abaixo. use "YOUR_DATABASE_NAME"; db.dropDatabase ();

Shrinivas Kalangutkar
fonte
0

Solte um banco de dados MongoDB usando 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
fonte
-1

O banco de dados mostrará o tipo de nome do banco de dados atual: db.dropDatabase ();

1- selecione o banco de dados a ser descartado usando a palavra-chave ' use '.

2- e digite db.dropDatabase ();

nixxo_raa
fonte
-2

use o seguinte comando do mongo shell para soltar db

usar ; db.dropDatabase ();

Anoop Sharma
fonte
como esse comando especifica qual banco de dados deve ser descartado? Com um banco de dados chamado "auth-usuários" Eu tentei > use auth-users ; db.dropDatabase()e > use auth-users; db.dropDatabase()e ambos retornaram[thread1] Error: [auth-users ; db.dropD atabase()] is not a valid database name :
Mr. Kennedy