Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

203
Visualizações
In "mongosh", how do I delete all databases without deleting the typical "admin", "config", or "local" databases?

What am I trying to do?

I wrote a script called deleteDatabases.js and it's supposed to delete all databases (besides "admin", "config", or "local") when inside mongosh. I do not have access to mongo, only mongosh.

What is the code that currently tries to do that?

deleteDatabases.js

Mongo().getDBNames().forEach(function(x) {
  if (['admin', 'config', 'local'].indexOf(x) < 0) {
    Mongo().getDB(x).dropDatabase();
  }
})

Inside mongosh:

$ mongosh
...
Using MongoDB: 4.4.1
Using Mongosh Beta: 0.4.0
> show dbs
admin 184 kB
config 36.9 kB
database1 283 kB
database2 420 kB
database3 1337 kB
local 90.1 kB
> .load /deleteDatabases.js

... (Code from deleteDatabases.js) ...

TypeError: (intermediate value).getDBNames is not a function

Before what I did to successfully delete these databases was:

> db = db.getSiblingDB("database1")
database1
> db.dropDatabase()
{ ok: 1, dropped: 'database1' }
# Repeat for each database I want deleted.

What do I expect the result to be?

I expect all the databases to be deleted besides "admin", "config", or "local".

What is the actual result?

As above, there's a TypeError.

What I think the problem could be?

  1. The version of mongosh I'm using is out of date and does not have those methods implemented yet or at all.
  2. My .js file is implemented incorrectly.

Was wondering if there was an alternative where I still use mongosh unless I have to use something else.

EDIT:

deleteDatabases.js

db.adminCommand( { listDatabases: 1 } ).databases.
  map(database => database.name).
  filter(name => ["admin", "config", "local"].indexOf(name) == -1).
  forEach(function(name){db.getSiblingDB(name).dropDatabase()})

This is the fix that I'm using, but would love the .map() to work so I can see an output after running the command as spoken by Joe.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Use the listDatabases admin command, map to get just the database name, and filter to eliminate the ones you don't want:

db.adminCommand("listDatabases").databases.
   map(d => d.name).
   filter(n => ["admin", "config", "local"].indexOf(n) == -1 ).
   map(n => db.getSiblingDB(n).dropDatabase())

Note that if you use map instead of forEach you will get back a confirmation of which databases were dropped successfully, like

[
  { ok: 1, dropped: 'test' },
  { ok: 1, dropped: 'test1' },
  { ok: 1, dropped: 'test2' }
]
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda