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

208
Visualizações
En "mongosh", ¿cómo elimino todas las bases de datos sin eliminar las típicas bases de datos "admin", "config" o "local"?

¿Qué estoy tratando de hacer?

Escribí un script llamado deleteDatabases.js y se supone que debe eliminar todas las bases de datos (además de "admin", "config" o "local") cuando esté dentro mongosh . No tengo acceso a mongo , solo mongosh .

¿Cuál es el código que actualmente intenta hacer eso?

deleteDatabases.js

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

mongosh interior:

 $ 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

Antes, lo que hice para eliminar con éxito estas bases de datos fue:

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

¿Cuál espero que sea el resultado?

Espero que se eliminen todas las bases de datos además de "admin", "config" o "local".

¿Cuál es el resultado real?

Como arriba, hay un TypeError .

¿Cuál creo que podría ser el problema?

  1. La versión de mongosh que estoy usando está desactualizada y no tiene implementados esos métodos todavía o en absoluto.
  2. Mi archivo .js está implementado incorrectamente.

Me preguntaba si había una alternativa en la que sigo usando mongosh a menos que tenga que usar otra cosa.

EDITAR:

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

Esta es la solución que estoy usando, pero me encantaría que .map() funcione para poder ver una salida después de ejecutar el comando como lo dijo Joe.

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

0

Use el comando de administración listDatabases , map para obtener solo el nombre de la base de datos y filter para eliminar las que no desea:

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

Tenga en cuenta que si usa el map en lugar de forEach , obtendrá una confirmación de qué bases de datos se eliminaron con éxito, como

 [ { 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