Estou desenvolvendo o MongoDB. Para propósitos totalmente não-maus, às vezes eu quero explodir tudo em um banco de dados - ou seja, excluir todas as coleções e qualquer outra coisa que esteja por aí e começar do zero. Existe uma única linha de código que me permita fazer isso? Pontos de bônus por fornecer um método de console do MongoDB e um método de driver do MongoDB Ruby.
454
db.dropAllUsers();
Além disso, na linha de comando:
fonte
Eu tive o mesmo problema, quando precisava redefinir todas as coleções, mas não queria perder nenhum usuário do banco de dados. Use a seguinte linha de código, se desejar salvar a configuração do usuário para o banco de dados:
Esse código passará por todos os nomes de coleção de um banco de dados e eliminará aqueles que não começam com "sistema".
fonte
remove
no lugar dedrop
. Aremove
opção parece manter restrições nos campos das coleções que você está limpando. Quando empregamos odrop
método, aunique
restrição em um de nossos campos não foi respeitada após a queda.else
ramo (aoif (c.indexOf("system.") == -1)
) que sim, emremove
vez dedrop
. Dessa forma, você não ficará com as coleções vazias se não as estiver mais usandodb[c]
, use odb.getCollection(c)
que evita erros quando os nomes de coleções são dígitos .db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
Eu segui a
db.dropDatabase()
rota por um longo tempo, no entanto, se você estiver tentando usá-la para limpar o banco de dados entre os casos de teste, poderá encontrar problemas com restrições de índice que não são respeitadas após a queda do banco de dados. Como resultado, você precisará mexer com o garantirIndexes, ou uma rota mais simples seria evitar o dropDatabase completamente e apenas remover de cada coleção em um loop, como:No meu caso, eu estava executando isso na linha de comando usando:
fonte
db[collection_name].drop()
e exibia os mesmos problemas que você descreveu com odb.dropDatabase()
método. Mudando os/drop/remove/
trabalhou brilhantemente!remove()
isso não funciona bem no MongoDB para Windows e, em vez disso, eu precisava fazer oremove({})
que funciona no OSX e no Windows.Compilando respostas de @Robse e @DanH (parabéns!), Obtive a seguinte solução que me satisfaz completamente:
Conecte-se ao seu banco de dados, execute o código.
Ele limpa o banco de dados descartando as coleções de usuários e esvaziando as coleções do sistema.
fonte
Ouvir algumas operações de exclusão completa de uso 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 mydb
comando e, em seguida,fonte
Usar
fonte
caso você precise descartar tudo de uma vez: (descartar todos os bancos de dados de uma só vez)
fonte
fonte
se você deseja excluir apenas um banco de dados e suas sub-coleções, use este:
use <database name>;
db.dropDatabase();
se você deseja excluir todos os bancos de dados no mongo, use este:
fonte
A maneira mais simples de excluir um banco de dados, digamos, blog:
fonte
Para desenvolvedores de Meteor.
Abra uma segunda janela do terminal enquanto executa o aplicativo
localhost:3000
.Na pasta do seu projeto, execute
meteor mongo
,.coolName = new Mongo.Collection('yourCollectionName');
Em seguida, basta digitar
db.yourCollectionName.drop();
Você verá automaticamente as alterações no seu servidor local.
Para todo mundo.
db.yourCollectionName.drop();
fonte
espero que ajude
fonte
eu prefiro
sobre
Se a sua coleção for uma coleção especial, ou seja, uma coleção limitada ou uma coleção com um campo marcado como exclusivo, soltar limpará a própria coleção e, quando a coleção for criada novamente, será uma coleção comum. Você precisará definir as propriedades novamente. Portanto, use
remove()
para limpar os documentos sem remover a coleção e afetar o comportamento da coleção.fonte
drop()
é quase instantâneo eremove({})
bloqueia seu banco de dados por minutos ou dezenas de minutos (dependendo do tamanho da coleção).Para excluir todos os bancos de dados, use:
fonte
Documentação do MongoDB db.dropDatabase () explicando a modificação introduzida na 2.6:
fonte
No MongoDB 3.2 e mais recente,
Mongo().getDBNames()
nomongo
shell será exibida uma lista de nomes de banco de dados no servidor:UMA
forEach()
loop sobre a matriz poderia chamardropDatabase()
para eliminar todos os bancos de dados listados. Opcionalmente, você pode optar por ignorar alguns bancos de dados importantes que não deseja descartar. Por exemplo:Exemplo de execução:
fonte